【问题标题】:Replace inner Javascript for loop without using loop, instead maybe use map , filter, reduce?在不使用循环的情况下替换内部 Javascript for 循环,而不是使用 map、filter、reduce?
【发布时间】:2020-05-12 20:38:44
【问题描述】:

我有 2 个循环,外部循环已经是现有代码的一部分...但是新循环我不知道它是否更慢、更丑或什么.. 但我想我只是想进入现代js 与 map/reduce/filter 等...

这个示例不显示真实代码,应该足以解释代码

var master = ['hhhh', 'yyyy']

var array = ['adf','hhhh','jjj']


for (index = 0; index < master.length; index++) { 
    //console.log(master[index]); 

    for (index2 = 0; index2 < array.length; index2++) { 

       //console.log(array[index2]); 

       if(master[index] === array[index2]){
          console.log(array[index2]);
       }
    } 

} 

【问题讨论】:

  • 为什么你的标题要求“不使用循环映射、过滤、减少”?
  • 那么你需要像map或reduce这样的内置js方法吗?
  • 不,这个样本还不够。记录这些值几乎没有意义,应该以不同的方式进行。实际用例是什么?
  • 更新了标题... - 我不明白为什么样本不够@Bergi master one ...来自数据库中的数据...。现有代码是一个循环,内部循环,...根据产品所有者告诉我要使用的内容,该数组将是一个硬编码的值列表,需要匹配。我不知道还要做什么才能真正证明它。似乎其他人正在做一些体面的尝试,我需要通过 thx
  • @JeremyMiller 知道一个列表是动态的,另一个是硬编码的,这已经很重要了,谢谢。但是你打算如何处理这个循环的结果呢?你真的只想输出元素吗?因为为此,一个简单的循环是正确的方法。

标签: javascript ecmascript-6 mapreduce


【解决方案1】:

您可以使用 map 方法来遍历数组,如下所示:

var master = ['hhhh', 'yyyy']
var array = ['adf','hhhh','jjj']
for (index = 0; index < master.length; index++) { 
    //console.log(master[index]); 
    array.map(function(element){
        if(master[index] == element){
            console.log(element);
        }
    })
}

【讨论】:

  • 没有。不要使用map“迭代”。它用于创建新数组,但您在这里没有使用它。你应该使用forEach,或者更确切地说,一个普通的循环。
【解决方案2】:

您似乎需要两个数组的交集。这是两个数组之间的共同点。您可以使用filterindexOf 来实现。

var master = ['hhhh', 'yyyy'];
var array = ['adf','hhhh','jjj'];

const common = array.filter(item => master.indexOf(item) > -1);

console.log(common);

【讨论】:

  • 如果您需要外部循环,那么您的代码就可以了。在这种情况下,请使用 for 循环而不是 mapforEach,因为 for 循环更快,并且您在这里不需要任何其他内容。
【解决方案3】:

如果需要交汇可以使用此方法

let intersection = master .filter(x => array .includes(x));

【讨论】:

    猜你喜欢
    • 2017-01-28
    • 1970-01-01
    • 2020-11-25
    • 2011-12-27
    • 2018-02-22
    • 2022-11-12
    • 2021-06-06
    • 2020-08-14
    • 2019-11-17
    相关资源
    最近更新 更多