繁体   English   中英

从第一个对象中删除数组中的重复项

[英]Remove duplicates from array of arrays by the first object

我有一个看起来像这样的数组数组:

arr = [
["Bob","USA","55"],
["Frank","Canada","20"],
["Bob","UK","35"],
["Bob","France","38"],
["Anna","Poland","22"]
]

我想删除在第一个位置具有相同值(相同名称)的重复数组-所以我想我的输出看起来像这样:

arr = [
["Bob","USA","55"],
["Frank","Canada","20"],
["Anna","Poland","22"]
]

我正试图以这种方式做到这一点:

uniqueArr = []
for (var i in arr) {
if (uniqueArr.indexOf(arr[i][0]) === -1)) {
uniqueArr.push(arr[i][0])
}

一切正常-我的输出看起来像鲍勃,弗兰克,安娜

但是问题是当我尝试使用唯一的值名称接收整个数组时。 当我在做:

uniqueArr = []
for (var i in arr) {
if (uniqueArr.indexOf(arr[i][0]) === -1)) {
uniqueArr.push(arr[i])
}

我的输出看起来就像输入数组。 你知道我在哪里做错了吗?

您可以在单独的数组中跟踪key字符串,然后跟踪它,例如:

var uniqueArr = [],
    keys = []; // Create an array for storing the key values
for (var i in arr) {    
    if (keys.indexOf(arr[i][0]) === -1) {
        uniqueArr.push(arr[i]); // Push the value onto the unique array
        keys.push(arr[i][0]); // Push the key onto the 'key' array
    }
}
console.log(uniqueArr);

jsFiddle示例

尝试

arr = [
    ["Bob", "USA", "55"],
    ["Frank", "Canada", "20"],
    ["Bob", "UK", "35"],
    ["Bob", "France", "38"],
    ["Anna", "Poland", "22"]
]
var newArr = [];
for (var i = 0; i < arr.length; i++) {
    if (isInArr(newArr, arr[i]) == -1) {
        newArr.push(arr[i]);
    }
}

function isInArr(checkArr, value) {
    var index = -1;
    for (var i = 0; i < checkArr.length; i++) {
        if (checkArr[i][0] == value[0]) {
            index = i;
            break;
        }
    }
    return index;
}

console.log(newArr)

DEMO

看一下功能unique2。 有用!

 originalArr = [ ["Bob", "USA", "55"], ["Frank", "Canada", "20"], ["Bob", "UK", "35"], ["Bob", "France", "38"], ["Anna", "Poland", "22"] ]; function unique(arr) { uniqueArr = []; for (var i in arr) { if (uniqueArr.indexOf(arr[i][0]) === -1) { uniqueArr.push(arr[i]); } } return uniqueArr; } function unique2(arr) { uniqueArr = []; keys = []; for (var i in arr) { if (keys.indexOf(arr[i][0]) === -1) { uniqueArr.push(arr[i]); keys.push(arr[i][0]); } } return uniqueArr; } var response = document.getElementById('response'); response.textContent = JSON.stringify(unique(originalArr)); var response2 = document.getElementById('response2'); response2.textContent = JSON.stringify(unique2(originalArr)); 
 <h1>Your code</h1> <div id="response"></div> <h1>My code</h1> <div id="response2"></div> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM