简体   繁体   English

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

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

I have an array of arrays which looks like this: 我有一个看起来像这样的数组数组:

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

I like to remove duplicate arrays which have the same value on the first position(the same name) - so I'd like to my output will look like that: 我想删除在第一个位置具有相同值(相同名称)的重复数组-所以我想我的输出看起来像这样:

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

I'm trying to do this in this way: 我正试图以这种方式做到这一点:

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

Everything works ok - my output looks like Bob, Frank, Anna 一切正常-我的输出看起来像鲍勃,弗兰克,安娜

But the problem is when I'm trying to recive whole arrays with unique value name. 但是问题是当我尝试使用唯一的值名称接收整个数组时。 When I'm doing: 当我在做:

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

My output looks exactly like the input array. 我的输出看起来就像输入数组。 Do you know where I'm doing wrong? 你知道我在哪里做错了吗?

You could keep track of the key string in a separate array and track that instead, for example: 您可以在单独的数组中跟踪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 example jsFiddle示例

try 尝试

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 DEMO

Take a look atthe function unique2. 看一下功能unique2。 It works! 有用!

 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