我找到了很多解决这个问题的帖子:
假设我们有:
array1 = ['A', 'B', 'C', 'D', 'E']; array2 = ['C', 'E'];
Run Code Online (Sandbox Code Playgroud)
有没有一个经过验证的快速解决方案来比较两个数组,返回一个数组,而两个数组中都没有出现值(这里是C和E).期望的解决方案:
array3 = ['A', 'B', 'D']
Run Code Online (Sandbox Code Playgroud)
但是,如果你有:
array1 = ['A', 'B', 'C', 'D', 'D', 'E']; array2 = ['D', 'E'];
Run Code Online (Sandbox Code Playgroud)
而你正在寻找的解决方案是:
array3 = ['A', 'B', 'C', 'D'] // don't wipe out both D's
Run Code Online (Sandbox Code Playgroud)
这是一些背景:
你正试图教学生如何运作句子.你给他们一个混乱的句子:
吃 - 猫 - 老鼠 - 的 -
他们开始输入答案:猫
您想要提示现在阅读:
吃 - 老鼠 -
目前,我的代码取出了两个.
这是我尝试过的:
(zsentence是xsentence的副本,将被下面的代码操纵,join()ed并放到屏幕上)
for (i=0; i < answer_split.length; i++) {
for (j=0; j < xsentence.length; j++) {
(function(){
if (answer_split[i] == xsentence[j]) { zsentence.splice(j,1); return; }
})();
}
}
Run Code Online (Sandbox Code Playgroud)
Mat*_*all 14
只需遍历要删除的元素数组.
var array1 = ['A', 'B', 'C', 'D', 'D', 'E'];
var array2 = ['D', 'E'];
var index;
for (var i=0; i<array2.length; i++) {
index = array1.indexOf(array2[i]);
if (index > -1) {
array1.splice(index, 1);
}
}
Run Code Online (Sandbox Code Playgroud)
这是O(array1.length * array2.length)但对于相当小的阵列和在现代硬件上这不应该远程操作,导致的问题.
http://jsfiddle.net/mattball/puz7q/
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/splice
您也可以使用过滤器。请查看以下示例。
var item = [2,3,4,5];
var oldItems = [2,3,6,8,9];
oldItems = oldItems.filter(n=>!item.includes(n))
Run Code Online (Sandbox Code Playgroud)
所以这将返回 [6,8,9]
如果您只想获得匹配的项目,则必须编写以下代码。
oldItems = oldItems.filter(n=>item.includes(n))
Run Code Online (Sandbox Code Playgroud)
这将仅返回 [2,3]。
| 归档时间: |
|
| 查看次数: |
16649 次 |
| 最近记录: |