过滤数组无法正常工作

时间:2018-01-15 23:06:56

标签: javascript arrays node.js filter

我无法正确过滤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]。我怎么能这样做?

1 个答案:

答案 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);