1

我知道对此有很多答案,并且大多数人建议循环遍历对象,返回您需要的内容,无论如何,我不确定这是最好的方法。

我所拥有的是通过entries引用另一个数组people(with idand name)person_idprojects(with idand name) by的数组project_id

我需要的是能够访问具有特定id内部循环的项目和人员 on entries,这样我就可以获得他们的名字。做其他人建议的事情,我会在 的每个刺激中循环people,这似乎是非常多的循环。projectsentries

所以我想我会在 initpeopleprojectsinit 上做一些我称之为“哈希表”的东西,这意味着几乎要创建一个新对象people_hashtableprojects_hashtable其中键是 id

所以

[
  {
    "id": "8",
    "name": "John Doe"
  }
]

会变成

{
    "8": {
        "name": "John Doe"
    }
}

这样我就可以轻松访问名称而无需一直循环,同时仍保持旧数组的原始顺序(这就是为什么我不直接从服务器以这种方式输出它,你不能完全订购一个对象和我同时使用peopleprojects在一个选择框中,需要按名称排序)。

我做对了吗?有没有更好的办法?或者我应该完全忘记这一点并按照其他问题的建议坚持搜索循环?

我试图在服务器端和客户端都尽可能高效。

4

4 回答 4

3

您基本上将所有对象加倍只是为了避免循环。所以,除非你有一些糟糕的性能问题,否则我会避免这种情况。如果您真的非常需要一种哈希图,我宁愿存储数组的索引而不是对象的另一个副本:

// array
var arr = [
  {
    "id": "8",
     "name": "John Doe"
  }
];

// lookup table
var lookup = {
  "8": 0
}

当然,这样做意味着您不能在不重建哈希图的情况下修改数组。

生成它非常简单:

var lookup = arr.reduce(function(lookup, item, index) {
  lookup[item.id] = index;
  return lookup;
}, {});

您还可以使用它来生成您提到的问题的对象:

var lookup = arr.reduce(function(lookup, item) {
  lookup[item.id] = {name: item.name};
  return lookup;
}, {});

但正如我所说,这是我会避免的。

于 2013-04-10T09:39:41.183 回答
0

以下代码可能会对您有所帮助。JSFIDDLE

var arr = [
  {
    "id": "8",
    "name": "John Doe"
  }
];

var obj = {};
for(var i=0; i< arr.length; i++){
   obj[arr[i].id] = {name: arr[i].name};
}

console.log(obj);
于 2013-04-10T09:29:32.243 回答
0
var articles= {
    "item1":{
         "id":"155",
         "name":"First Item",
         "value":-5199.6
    },
    "item2":{
         "id":"255",
         "name":"Second Item",
         "value":-424.91
    }
}

var ids = [];
for(var item in articles) {
    ids.push(articles[item]['id']);
}

console.log(ids);
于 2017-06-19T13:19:17.197 回答
-1

这个库https://github.com/paularmstrong/normalizr使它很容易做到。规范化和非规范化。

可以转这个

{
  "id": "123",
  "author": {
    "id": "1",
    "name": "Paul"
  },
  "title": "My awesome blog post",
  "comments": [
    {
      "id": "324",
      "commenter": {
        "id": "2",
        "name": "Nicole"
      }
    }
  ]
}

进入这个

{
  result: "123",
  entities: {
    "articles": { 
      "123": { 
        id: "123",
        author: "1",
        title: "My awesome blog post",
        comments: [ "324" ]
      }
    },
    "users": {
      "1": { "id": "1", "name": "Paul" },
      "2": { "id": "2", "name": "Nicole" }
    },
    "comments": {
      "324": { id: "324", "commenter": "2" }
    }
  }
}

反之亦然。

于 2017-06-19T09:13:49.293 回答