首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Javascript查找两个数组中缺失元素的索引

Javascript查找两个数组中缺失元素的索引
EN

Stack Overflow用户
提问于 2018-10-03 02:01:39
回答 3查看 1.3K关注 0票数 0

我有以下JavaScript,其中有一些列表:

代码语言:javascript
复制
var deleteLinks = $(".remove-button .remove-from-cart");
deleteLinks.on('click', function(ev){
    ev.preventDefault();
    console.log("registered: " + deleteLinks);
    var currentHTML = $('.product');
    var currentText = $('.product .product-details .name-header');  
    var newHTML ;
        $.ajax({
        url: this.href,
        type: "GET",
        dataType: "html",
          success: function(data) {
              newHTML = $(data).find('.product .product-details .name-header'); 
              for(i = 0; i  < newHTML.length; i++){
                  console.log("new: " + newHTML[i].innerText);
                  console.log("old: " + currentText[i].innerText);
              }
          }
    });
});

变量currentHTML包含一个div数组,这些div是一个容器。currentText包含每个容器名称的数组。AJAX响应(newHTML)中收到的变量包含一个名称数组。此数组在一些用户交互后更新。currentText变量的一个或多个条目可能丢失,我希望找到它们的索引,以便可以从容器(currentHTML)中删除它们。

有人能帮我找到currentText和检索到的数据(newHTML)之间缺失元素的索引吗?

EN

回答 3

Stack Overflow用户

发布于 2018-10-03 02:49:34

假设您在数组A中有唯一的元素,并且在数组B中只有一个出现。我们可以只使用set来添加数组A的所有元素,并在迭代数组B时从set中删除这些元素。使用findIndex查找集合中剩余的元素。

代码语言:javascript
复制
const a = [1,2,3,4,5];
const b = [2,1,5,4];
let set = new Set();
a.forEach(ele => set.add(ele));
b.forEach(ele => {
  if(set.has(ele)){
    set.remove(ele);
  }
});
let res = [];
for(let s of set) {
  if(a.findIndex(s) !== -1) {
    res.push({
     arr:  a,
     pos: a.findeIndex(s)
    });
  }else {
    res.push({
     arr:  b,
     pos: b.findeIndex(s)
    });
  }
}

res数组包含索引和元素所在的数组。

票数 0
EN

Stack Overflow用户

发布于 2018-10-03 03:15:57

如果您可以访问lodash,您可以使用_.difference在一行中解决此问题。

代码语言:javascript
复制
var a = ['a', 'b', 'c'],
  b = ['b'],
  result = [];
_.difference(a, b).forEach(function(t) {result.push(a.indexOf(t))});

console.log(result);
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

票数 0
EN

Stack Overflow用户

发布于 2018-10-03 05:06:16

正如我从您的代码中看到的,您需要比较两个对象的innerText,并找到缺少的元素的索引。

代码语言:javascript
复制
var missing_indices = [];
for(var i=0;i<currentText.length;i++){
    var found = false;
    for(var j=0;j<newHTML.length;j++){
        if(currentText[i].innerText == newHTML[j].innerText){
            found = true;
            break;
        }
    }
    if(!found){
        missing_indices.push(i);
    }
}

然后使用missing_indices从currentHTML中删除缺少的元素

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52613907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档