【发布时间】:2014-07-31 16:30:14
【问题描述】:
我有两个 JavaScript 对象如下;
cages = [
{
"id":1,
"name":"Cage 1"
},
{
"id":2,
"name":"Cage 2"
}
]
animals = [
{
"id":1,
"name":"doge",
"cages": [
{
"id":1,
"name":"Cage 1"
},
{
"id":2,
"name":"Cage 2"
}
]
}
{
"id":2,
"name":"kat",
"cages": [
{
"id":2,
"name":"Cage 2"
}
]
}
]
我想将动物添加到笼子对象中,这样我就得到了;
cages = [
{
"id":1,
"name":"Cage 1",
"animals": [
{
"id":1,
"name":"doge"
}
]
},
{
"id":2,
"name":"Cage 2",
"animals": [
{
"id":1,
"name":"doge"
},
{
"id":2,
"name":"kat"
}
]
}
]
像这样组合两个对象有哪些方法?哪些效率最高?我的第一次尝试有一些嵌套的 for 循环,这些循环变得非常深沉和混乱,而且从来没有完全奏效。到目前为止,这是我所掌握的一些不完整的逻辑;
for(var i=0; i<animals.length; i++) {
for(var n=0; n<animals.cages.length) {
cages[].push(animals[i]);
}
}
我需要知道如何指定将动物推入哪个笼子。我希望它像cages[cage].push(animals[i]); 一样简单,但在这种情况下,每个笼子对象的键都是相同的。
【问题讨论】:
-
使用例如迭代
animalsi,嵌套在其中,迭代animals[i].cages,例如j,您现在应该拥有构建数据所需的所有信息。此外,要遍历 Array,您只需使用普通的for,因为您可以访问.length并且所有内容都使用索引,for..in用于通用 Objects 其中键/属性名称可以是任何 String -
@PaulS。使用
for each(animal in animals)与for (var i = 0; i < animals.length; i++)本质上是一样的,但我仍然不确定如何选择cages 数组中的哪个对象将动物推入。 -
for each..inis depreciated,在 ES6 中类似的东西是for..of,但你仍然不应该将其中任何一个用于 Array。你不能假设Array.prototype中没有可枚举的东西,例如如果由于某种原因您需要在将来为某些东西添加 shim 或 polyfillArray.prototype.contains = function contains(x) {return this.indexOf(x) !== -1};,那么您现在也将迭代该函数 -
@PaulS。我在示例中更改了 for each 循环。但我的问题还是一样。
-
我认为我需要弄清楚的是; 'cages 数组中的哪个索引包含一个对象,其键“id”的值为 x。'
标签: javascript arrays object merge