我无法正确过滤Javascript中的数据。在我的例子中,var1 = 20,var2 = 10,var3 = 30,var4 = 40.这是我的代码:
var variables = ['var1', 'var2', 'var3', 'var4'],
values = [20, 10, 30, 40],
filter = ['var1', 'var3'],
result = values.filter((_, i) => filter.includes(variables[i]));
console.log(result); // Output =>[20, 30]
现在,每次索引表示过滤器数组中存在的值时,过滤都会推送一个值。我希望能够将var1和20移动到索引2,将var3移动到索引0而不影响结果的顺序。基本上我希望它遵循filter-array的顺序,所以对于这个例子总是[20,30]。我怎么能这样做?
答案 0 :(得分:2)
不是从values
开始构建结果并向下过滤,而是从filter
开始并映射到您的结果:
var variables = ['var1', 'var2', 'var3', 'var4'],
values = [20, 10, 30, 40],
filter = ['var3', 'var1'],
result = filter.map((variable) => values[variables.indexOf(variable)]);
console.log(result);
但是,我强烈建议你完全避免这种紧密耦合的字符串数组模式,而只是使用一个专门为这种数据结构构建的对象:
var values = {
var1: 20,
var2: 10,
var3: 30,
var4: 40
};
var filter = ['var3', 'var1'];
var result = filter.map((key) => values[key]);
console.log(result);