Javascript - 如何检测两个数组的差异

标签 javascript arrays

对于可能具有误导性的标题,我们深表歉意。

我有两个数组,一个包含默认值,另一个包含产品。

我想做的是比较两者,以便您可以根据需要添加/删除任意数量的产品,但不能减少默认产品。

让我们说

default = [1,2]

products = [1,1,1,1,2,2,2,3,4,5,6,7,8,9]

这应该有效。

但是你不能有这样的东西:

default = [1,2]

products = [2,2,2,3,4,5,6,7,8,9]

因为默认数组中至少需要相同数量的产品,而在最后一个示例中,1 不包含在产品数组中。

我用它来比较两个数组:

Array.prototype.containsArray = function ( array /*, index, last*/ ) {

    if( arguments[1] ) {
        var index = arguments[1], last = arguments[2];
    } else {
        var index = 0, last = 0; this.sort(); array.sort();
    };

    return index == array.length
        || ( last = this.indexOf( array[index], last ) ) > -1
        && this.containsArray( array, ++index, ++last );

};

arr1.containsArray( arr2 )

哪个有效。在我的函数(用于添加/删除产品的函数)中,我尝试进行这样的检查:

removeDeviceToZone = function(zone, ID) {
  if (products.containsArray(default) {
    return products = removeFromArray(products, ID);
  }
};

但问题是,在执行检查时,数组仍然是正确的,但一旦删除一个产品,它就不再正确了。什么是最好的检查方法来防止在删除项目而不真正删除它之后数组将是什么?有可能吗?这是最好的方法吗?谢谢

最佳答案

您应该使用 every 函数,它接受应用于数组中每个项目的回调提供的方法。

The every() method tests whether all elements in the array pass the test implemented by the provided function.

function containsArray(defaultArray, products){
    return defaultArray.every(function(item){
      return products.indexOf(item)!=-1;
    });
}
let defaultArray = [1,2]
let products = [1,1,1,1,2,2,2,3,4,5,6,7,8,9];
let products2=[2,2,2,3,4,5,6,7,8,9];
let contains=containsArray(defaultArray,products);
let contains2=containsArray(defaultArray,products2);
console.log(products.toString()+'->'+contains);
console.log(products2.toString()+'->'+contains2);

当您删除项目时,您应该检查 containsArray 是否保持为真。换句话说,您必须检查 containsArray 函数是否在删除元素后返回 true。如果是,则 return 产品。否则,返回旧的products数组。

removeDeviceToZone = function(zone, ID) {
   let productsCopy=products;
   let products=removeFromArray(products, ID);
   if (containsArray(default,products) && containsArray(default,productsCopy) {         
      return products;
   }
   else
      return productsCopy;
};

关于Javascript - 如何检测两个数组的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45323250/

相关文章:

Javascript 揭示模块模式 - this 和内部函数调用

c - 如何在 C 中使用 malloc 和 realloc 正确分配结构中的数组?

javascript - 从 javascript 对象方法回调中检索变量

Javascript - 循环显示一些未定义的数组

arrays - 如何让这个数组组合算法更加高效?

java - 检查数组中模式的递归方法

javascript - 查找在 Javascript 数组中只出现一次的项目

arrays - 在类中实现记录数组字段的属性读取和读写

javascript - 使用mutationobservers检测获取请求结果的变化

javascript - 动态为对象分配属性名称