Javascript 每个迭代都从上一个迭代结果开始
如何迭代一个数组,每次迭代都取前面的结果?我在数组B中寻找相同的值,就像在数组A中一样,但数组A只有一个值,就像for in循环的结果一样。我想要返回数组C,它是数组A中所有项的开始数组减法 到目前为止,我有以下代码:Javascript 每个迭代都从上一个迭代结果开始,javascript,Javascript,如何迭代一个数组,每次迭代都取前面的结果?我在数组B中寻找相同的值,就像在数组A中一样,但数组A只有一个值,就像for in循环的结果一样。我想要返回数组C,它是数组A中所有项的开始数组减法 到目前为止,我有以下代码: x = newArray.indexOf(zeme[0]); for (b = 0; b < newArray.length; b++) { if (x === b) { newArray.splice(b, zeme.length); } } 取得成果
x = newArray.indexOf(zeme[0]);
for (b = 0; b < newArray.length; b++) {
if (x === b) {
newArray.splice(b, zeme.length);
}
}
取得成果:
array C = ['can', 'usa']
//first iteration, found 'eng' and deleted.
array C = ['usa', 'eng']
//second iteration found 'can' and deleted.
所需结果:
array C = ['usa']
//after first iteration in array left only two items ['can', 'usa']
//after second iteration take array ['can', 'usa'] and splice 'can'
如果
我想要返回数组C,它是数组A中所有项的开始数组减法
这是你问题的要点,听起来你想要数组相交
function intersect(a, b) {
return a.filter((v) => b.indexOf(v) === -1);
}
console.log(intersect(['can', 'usa', 'eng'], ['usa', 'eng']));
输出
['can']
(注意:上面的实现没有经过优化;对于大型b
阵列,它可能会变得非常慢,因为最坏情况下的复杂性是O(n^2)。如果
我想要返回数组C,它是数组A中所有项的开始数组减法
这是你问题的要点,听起来你想要数组相交
function intersect(a, b) {
return a.filter((v) => b.indexOf(v) === -1);
}
console.log(intersect(['can', 'usa', 'eng'], ['usa', 'eng']));
输出
['can']
(注意:上面的实现没有经过优化;对于大型
b
阵列,它可能会变得非常慢,因为最坏情况下的复杂性是O(n^2)。?我仍然不明白您试图解释的内容?什么是zeme
?我仍然不明白您试图解释的内容?什么是zeme
?您可以得到O(n)通过创建一组b
<代码>返回a.filter((v)=>!bSet.has(v))代码>。当然,折衷的办法是为集合
留出空间。谢谢,但是如果我在一个数组b中有所有的值,而我没有,这可能会起作用。在两个输出中使用b=['usa'],b=['eng'],例如来自对象键的“for in-loop”结果。我不能将这些变量推送到一个数组中,因为它不适用于“if语句”过滤。这意味着,正如我在原始问题部分“获取结果”中提到的那样,我用你的函数得到两个数组输出。@滑块和集合的初始化时间,对于较小的b
s,这可能不值得。(一个启发式的,比如说,b.length>20
?,是合理的。)你可以通过创建一组b
来获得O(n)<代码>返回a.filter((v)=>!bSet.has(v))代码>。当然,折衷的办法是为集合
留出空间。谢谢,但是如果我在一个数组b中有所有的值,而我没有,这可能会起作用。在两个输出中使用b=['usa'],b=['eng'],例如来自对象键的“for in-loop”结果。我不能将这些变量推送到一个数组中,因为它不适用于“if语句”过滤。这意味着,正如我在原始问题部分“获取结果”中提到的那样,我用你的函数得到两个数组输出。@滑块和集合的初始化时间,对于较小的b
s,这可能不值得。(一个启发式,比如说,b.length>20
?,是合理的。)