从循环中删除重复项 - angularjs / javascript

时间:2016-01-21 13:41:06

标签: javascript angularjs

这是一个多维数组比较。演示:https://jsfiddle.net/vjnkc7dk/

我需要比较array1和amp; array2并将单个结果推送到div元素。

VRControls

3 个答案:

答案 0 :(得分:1)

这为您提供所需的输出

    arr2.forEach(function(value2) {
        var found = false;
        arr1.forEach(function(value1) {
            if (value2.id === value1.id) {
                document.getElementById('list').innerHTML += (value2.student_name + " -- true, <br/>");
                found = true;
            }
        });
        if (!found) {
            document.getElementById('list').innerHTML += (value2.student_name + " -- false, <br/>");
        }
    });

结果

A -- true,
L -- true,
B -- false,
C -- false,
D -- false,
E -- false,
F -- false,

答案 1 :(得分:0)

var arr1 = [{"id":2,"student_name":"LSa"},{"id":3,"student_name":"Liu Sa"},{"id":77,"student_name":"Liu Sa"}];
var arr2 = [{"id":2,"student_name":"A"},{"id":3,"student_name":"L"},{"id":4,"student_name":"B"},{"id":55,"student_name":"C"},{"id":25,"student_name":"D"},{"id":23,"student_name":"E"},{"id":89,"student_name":"F"}];

var combo = arr2.concat(arr1);

combo.filter(function (element, index) {
    var possibleDupeIndex = combo.findIndex(function (_element) {return _element.id === element.id});

    return possibleDupeIndex === -1 || possibleDupeIndex === index;
});

这将从两个数组的组合中删除所有重复项,第二个数组中的元素优先于第一个数组中的元素。

像underscore.js或lodash这样的工具非常有用。例如。在lodash中,同样可以通过以下方式实现:

_.uniqBy(arr2.concat(arr1), 'id')

答案 2 :(得分:0)

您循环遍历第一个数组中的每个元素,并根据它的id是否与第二个数组中的每个ID匹配而添加到列表中。

要获得所需的输出,您可以执行相同的循环,但只需在数组中的元素中添加属性即可找到它。

arr1.forEach(function(value1) {
  arr2.forEach(function(value2) {
    if (value1.id === value2.id ) {
      value2.found = true;
    }
  });
});

然后输出到这样的列表。

arr2.forEach(function(val) {
    document.getElementById('list').innerHTML += 
          (val.student_name + " -- " + (val.found ? "true":"false") + "<br/>");
})

Fiddle