【问题标题】:Unique Multi-dimensional associative arrays in javascriptjavascript中唯一的多维关联数组
【发布时间】:2014-10-09 08:31:05
【问题描述】:

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

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
}];

有人可以建议我实现这一目标的最佳和最快的方法吗?非常感谢一些帮助?

【问题讨论】:

    标签: javascript arrays unique


    【解决方案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]);
        }
    }
    

    【讨论】:

    • 嗨 Sebastien 是的,我正在构建一个 Web 应用程序,该应用程序执行大量数据操作和复杂的数组排序总是让我感到困惑,感谢您的完美响应。
    【解决方案2】:

    你可以试试这个……

    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]);
       }
    }
    

    【讨论】:

      【解决方案3】:

      我猜你必须处理一个临时 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}]
      

      【讨论】:

        猜你喜欢
        • 2011-08-15
        • 2015-11-15
        • 2018-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-22
        • 1970-01-01
        • 2013-01-25
        相关资源
        最近更新 更多