【问题标题】:An object contains a collection of objects - each with an id and name, how do I separate them?一个对象包含一组对象 - 每个对象都有一个 id 和名称,我如何将它们分开?
【发布时间】:2015-06-03 23:53:39
【问题描述】:

目前我有这个对象:

obj = [object{id: 1, name: test, parentID: 3}, object{id:1, name: another, parentID: 5}, object{id:2, name:something, parentID: 1}].

最终,我想要一个以不同方式构造的对象。 所以它是对象,但如果我的标识符是 1,它有一个名称的集合(在这种情况下是测试和另一个)。如果为 2,则仅显示“某物”。

我不知道这应该是什么样子,大概是这样吧? obj = [[1,test], [1,another], [2,something]]对吗?

所以如果我调用 obj[1] 我会得到一个倍数(测试,另一个等)。

有人可以帮忙吗?我一直在摆弄这个一个小时,我只是不明白。

我这样构建原始对象:

var obj = Array();
//loop here
  var obj = {
     id: id,
     name: name,
     parentID: parentID
  };
  obj.push(obj);

我做错了什么?我怎样才能解决这个问题?这让我得到了对象中的对象,但实际上我想要 id 和名称中的 id 和名称。我的最终目标是迭代这个。这样我就只能取出任何类似 ID 的名称,这样我就可以使用它来填充数组或计数

因此:

if(obj[id] == 1){
  //put the name in the new array
}

是我的终极目标。但是我对最初的对象创建有点迷失,所以现在它是一团糟。

【问题讨论】:

    标签: javascript jquery arrays multidimensional-array


    【解决方案1】:

    试试:

    var obj = [{id: 1, name: "Foo"}, {id: 2, name: "Fee"}, {id: 3, name: "Fii"}];
    var result = [], item, i = 0;
    while(item = obj[i++]){
        for(key in item){
            if(key === "id") continue; //remove this line if you want to keep the ID also in the array
            !result[i] && (result[i] = []);
            result[i].push(item[key]);
        }
    }
    console.log(result[1]); // --> ["Foo"]
    

    【讨论】:

    • 太棒了,一个后续问题。如果我想获取每个结果 [i] 的 id 或名称,有没有办法使用以下新结果执行此操作:obj = [[1,test], [1,another], [2,something ]],或者在没有键名的情况下这是不可能的?例如 - 如果我想迭代并仅将项目 id 为 1 的结果发送到新数组
    • 已更新。试试:console.log(result[1])
    • 你说得很好,它更轻。编辑 - 没关系,我完成了我的最终查询,感谢您的帮助
    【解决方案2】:

    我的看法:

    var sourceObject=[{id:0,name:'Tahir'},{id:0,name:'Ahmed'},{id:1,name:'David'},{id:1,name:'G'},{id:2,name:'TA'},{id:3,name:'DG'}];
    function getNames(id){
        var names=[],length=sourceObject.length,i=0;
        for(i;i<length;i+=1){
            if(sourceObject[i].id===id){
                names[names.length]=sourceObject[i].name;
            }
        }
        return names;
    }
    console.log(getNames(1));
    

    【讨论】:

    • @DavidG 请记住,在我的示例中也是如此,得到数组作为结果[1],它甚至更轻
    【解决方案3】:

    您想要做的是遍历对象数组一次。每次通过时,您都想检查您的新对象以查看该 id 是否存在。如果是,请添加名称。如果没有,请为该 id 创建一个新条目并添加一个包含一个条目的数组。请注意,这不处理重复的名称(它只是再次添加它)。

    var array = [{id:1, name:"test"}, 
                 {id:1, name:"another"},
                 {id:2, name:"something"}];
    
    var result = {};
    array.forEach(function(item) {
      if (result[item.id]) {
        result[item.id].push(item.name);
      }
      else {
        result[item.id] = [item.name];
      }
    });
    
    console.log(result[1]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-22
      • 2019-08-05
      • 1970-01-01
      • 2021-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多