【问题标题】:Filtering of arrays doesn't work properly数组过滤不能正常工作
【发布时间】:2018-01-15 23:06:56
【问题描述】:

我无法正确过滤 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,而不会影响结果的顺序。基本上我希望它遵循过滤器数组的顺序,所以在这个例子中总是 [20, 30] 。我该怎么做?

【问题讨论】:

    标签: javascript arrays node.js filter


    【解决方案1】:

    不要从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);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-12
      • 2017-01-23
      • 2021-09-01
      • 2023-02-20
      • 2023-04-06
      • 1970-01-01
      相关资源
      最近更新 更多