首页 > 解决方案 > Javascript二维数组包括

问题描述

我有以下 JS,我试图找出 2D 数组的元素是否包含在另一个 2D 数组中。但是,包含似乎不起作用,对于循环中的每个索引,我都会将不匹配记录到控制台。如何使用 2D 数组执行此操作?

deleteLinks.on('click', function(ev){
    ev.preventDefault();
    var currentHTML = $('.product');
    var currentHTMLMap = $('.product').toArray().map(elm => [ $(elm).attr("data-id-product"), $(elm).attr("data-id-product-attribute") ]);
    var deleteIndices = [];
        $.ajax({
        url: this.href,
        type: "GET",
        dataType: "html",
          success: function(data) {

             var newHTMLMap = $(data).find(".product").toArray().map(elm => [ $(elm).attr("data-id-product"), $(elm).attr("data-id-product-attribute") ]);
              for(i = 0; i  < currentHTMLMap.length; i++){
                  if (!(newHTMLMap.includes(currentHTMLMap[i]))) {
                  console.log("found mismatch for index " + i);
                  deleteIndices.push(i);
                  }
              }
                 for(i = 0; i < deleteIndices.length; i++) {
                currentHTML[deleteIndices[i]].remove();
}
          }
    });
});

我在变量中得到以下数据:

currentHTMLMap: 6,0,2,9,1,1
currentHTMLMap[0]: 6,0
currentHTMLMap[1]: 2,9
currentHTMLMap[2]: 1,1

newHTMLMap: 2,9,1,1
newHTMLMap[0]: 2,9
newHTMLMap[1]: 1,1

标签: javascript

解决方案


您可以检查Array#findIndex和 元素Array#every

var array = [[6, 0], [2, 9], [1, 1]],
    subset = [[2, 9], [1, 1], [1, 2], [4, 5]];

console.log(subset.map(a => array.findIndex(b => a.every((v, i) => v === b[i]))));


推荐阅读