javascript中独特的多维关联数组

时间:2014-10-09 08:31:05

标签: javascript arrays unique

我需要根据关键标题返回一个唯一的对象,这是我的对象。

var myObj = [{
    title: 'title one',
    beats: 1
}, {
    title: 'title two',
    beats: 2
}, {
    title: 'title three',
    beats: 3
}, {
    title: 'title one',
    beats: 4
}, {
    title: 'title one',
    beats: 5
}];

现在我真正需要它返回的是。

var myObj = [{
    title: 'title one',
    beats: 1
}, {
    title: 'title two',
    beats: 2
}, {
    title: 'title three',
    beats: 3
}];

有人可以告诉我最好和最快捷的方式来实现这一点真的很感激一些帮助吗?

3 个答案:

答案 0 :(得分:1)

你可以在寻求帮助之前尝试过一些东西,但这里有两种可能的解决方案。

// Solution 1
var newObj = myObj.filter(function(o1, i1) {
    return !myObj.some(function(o2, i2) {
        return (o1.title == o2.title && i2 < i1);
    });
});

// Solution 2
var newObj = [];
for(var i = 0 ; i < myObj.length ; i++) {
    var hasAlreadyBeenAdded = false;
    for(var j = 0 ; j < newObj.length ; j++) {
        if(newObj[j].title == myObj[i].title) {
            hasAlreadyBeenAdded = true;
            break;
        }
    }

    if(!hasAlreadyBeenAdded) {
        newObj.push(myObj[i]);
    }
}

答案 1 :(得分:0)

你可以试试这个......

var result = [];

for(var i=0;i < myObj.length - 1;i++){
   if(result.length > 0){
      for(var j=0;j < result.length - 1;j++){
         if(result[j]['title'] != myObj[i]['title']){
           result.push(myObj[i]);
         }
      }
   }else{
      result.push(myObj[i]);
   }
}

答案 2 :(得分:0)

我猜你必须处理一个临时的Javascript对象来存储密钥,如下例所示。

var tmp_keys = {};
var filteredObj = [];
for (index in myObj) {
    if (myObj[index].hasOwnProperty('title') && !tmp_keys.hasOwnProperty(myObj[index].title)) {
        tmp_keys[myObj[index].title] = true;
        filteredObj.push(myObj[index]);
    }
}

输出如下

[Object { title="title one", beats=1}, Object { title="title two", beats=2}, Object { title="title three", beats=3}]