这感觉就像一个非常基本的javascript问题,但我有两个数组:
var arrayA =['content','I dont','want'];
var arrayB = ['content','want','puppies'];
期望的结果:
arrayB = ['puppies']
数组中的项目是字符串。
我该怎么做? (如果答案适用于IE8 +,可获得奖励积分)
答案 0 :(得分:4)
您可以过滤arrayB
并仅采用arrayA
var arrayA =['content','I dont','want'],
arrayB = ['content','want','puppies'].filter(a => !arrayA.includes(a));
console.log(arrayB);

ES5
var arrayA =['content','I dont','want'],
arrayB = ['content','want','puppies'].filter(function (a) {
return arrayA.indexOf(a) === -1;
});
console.log(arrayB);

答案 1 :(得分:1)
对于值类型,以下内容应该有效:(不是在IE8中 - 正如指出的那样!)
function (arrayA, arrayB) {
return arrayB.filter(function(b) {
return arrayA.indexOf(b) == -1;
});
}
答案 2 :(得分:1)
从arrayB中删除arrayA中的所有项目
使用Array.prototype.forEach()
和Array.prototype.splice()
函数的解决方案:
var arrayA =['content','I dont','want'],
arrayB = ['content','want','puppies'];
arrayA.forEach(function (w) {
var idx = arrayB.indexOf(w);
~idx && arrayB.splice(idx, 1);
});
console.log(arrayB);

答案 3 :(得分:0)
这将使您进入IE9,但IE8不支持indexOf。如果您绝对需要IE8支持,则必须为indexOf编写polyfill。
var arrayA =['content','I dont','want'];
var arrayB = ['content','want','puppies'];
for(var i = 0; i < arrayA.length; i++){
var index = arrayB.indexOf(arrayA[i]);
if(index !== -1) {
arrayB.splice(index, 1);
}
}
console.log(arrayB);
答案 4 :(得分:0)
这会让你进入IE8
var arrayA =['content','I dont','want'];
var arrayB = ['content','want','puppies'];
for (var i = arrayB.length - 1; i >= 0; i--) {
for (var j = arrayA.length - 1; j >= 0; j--) {
if (arrayA[j] == arrayB[i]) {
arrayB.splice(i, 1);
}
}
}
console.log(arrayB);
答案 5 :(得分:0)
arrayA.forEach((valueA)=>{
let idx = (arrayB.findIndex( (valueB)=>valueB === valueA))
if(idx != -1){
arrayB.splice(idx,1)
}
})
答案 6 :(得分:0)
ES3解决方案。
var arrayA = ['content', 'I dont', 'want'];
var arrayB = ['content', 'want', 'puppies'];
for (var bIdx = arrayB.length - 1; bIdx >= 0; bIdx -= 1) {
for (var aIdx = 0; aIdx < arrayA.length; aIdx += 1) {
if (arrayB[bIdx] === arrayA[aIdx]) {
arrayB.splice(bIdx, 1);
break;
}
}
}
console.log(arrayB);
&#13;
请注意,外部循环(arrayB)反向运行,因为您将使用Array#splice从数组中删除项目,因此在迭代时它将被重新编入索引,这意味着您可能会错过一些项目,如果向前迭代。
有关更多示例和解释,请参阅以下内容。
How to remove element from array in forEach loop?
如果你为你使用的方法加载适当的填充程序,你可以愉快地在IE8上使用函数方法(只要你没有使用稀疏数组)。
https://github.com/es-shims/es5-shim
https://github.com/es-shims/es6-shim
https://github.com/es-shims/es7-shim
如果改变原始数组并不重要,那么可以使用Array#filter概念并用新数组替换旧数组。
var arrayA = ['content', 'I dont', 'want'];
var arrayB = ['content', 'want', 'puppies'];
var result = [];
for (var bIdx = 0; bIdx < arrayB.length; bIdx += 1) {
var itemB = arrayB[bIdx];
var found = false;
for (var aIdx = 0; aIdx < arrayA.length; aIdx += 1) {
if (itemB === arrayA[aIdx]) {
found = true;
break;
}
}
if (found !== true) {
result.push(itemB);
}
}
arrayB = result;
console.log(arrayB);
&#13;
请注意,我们现在可以转发两个数组,因为它们没有被突变,也没有重新索引。