我试图找到答案,但没有成功。
json数据样本,假设它名为 mainArray :
[{
"id": 4455,
"key1": 44,
"key2": 55
},
{
"id": 1122,
"key1": 11,
"key2": 22
}]
需要在 mainArray 中添加 nestedArray 数据示例:
[{
"nestedkey0": 'Value0',
"nestedkey1": "Value1",
"nestedkey2": "Value2"
},
{
"nestedkey0": "Value3",
"nestedkey1": "Value4",
"nestedkey2": "Value5"
}]
我们必须检查" id" key(在 mainArray 中)等于" specificId"变量:
var specificId = 4455;
如果它们相等 - 我们需要将 nestedArray 添加到 mainArray 的对象中作为具有对象列表的新键,因此返回的结果应如下所示:
[{
"id": 4455,
"newKey": [{
"nestedkey0": 'Value0',
"nestedkey1": "Value1",
"nestedkey2": "Value2"
},
{
"nestedkey0": "Value3",
"nestedkey1": "Value4",
"nestedkey2": "Value5"
}];
"key1": 44,
"key2": 55
},
{
"id": 1122,
"key1": 11,
"key2": 22
}];
这是Plunker上的代码示例: https://plnkr.co/edit/YJ3lTbleKrBJBaJm7VwU?p=preview
我有一种不应该感到困难的感觉,但我在angularjs方面没有足够的经验来解决这个问题。 提前感谢您的回答!
更新
更新了Plunker中的代码并回答了 Nina Scholz (链接在上面)
Halcyon
的另一个解决方案http://jsbin.com/xaxagusuma/edit?html,js,console,output
感谢大家的帮助!
答案 0 :(得分:3)
在普通的Javascript中,您可以使用Array.prototype.some()
进行迭代,因为可能会出现短路。
some()
方法测试数组中的某个元素是否通过了由提供的函数实现的测试。
var mainArray = [{ "id": 4455, "key1": 44, "key2": 55 }, { "id": 1122, "key1": 11, "key2": 22 }],
nastedArray = [{ "nastedkey0": 'Value0', "nastedkey1": "Value1", "nastedkey2": "Value2" }, { "nastedkey0": "Value3", "nastedkey1": "Value4", "nastedkey2": "Value5" }],
specificId = 4455;
mainArray.some(function (a) {
if (a.id === specificId) {
a.newKey = nastedArray;
return true;
}
});
document.write('<pre>' + JSON.stringify(mainArray, 0, 4) + '</pre>');
&#13;
答案 1 :(得分:1)
你怀疑这不是很难。最难的部分是找到插入 nastedArray 的正确对象。
var mainArray = [/**/];
var nastedArray = [/***/];
var index = null;
var specificId = 4455;
for (var i = 0; index === null, i < mainArray.length; i += 1) {
if (mainArray[i].id === specificId) {
index = i;
}
}
if (index !== null) {
mainArray[index].newKey = nastedArray;
}
答案 2 :(得分:1)
如果数组中的元素满足提供的测试函数,则find()方法返回数组中的值。否则返回undefined。
(看看compatibility table!)
var mainArray = [{ "id": 4455, "key1": 44, "key2": 55 }, { "id": 1122, "key1": 11, "key2": 22 }],
nastedArray = [{ "nastedkey0": 'Value0', "nastedkey1": "Value1", "nastedkey2": "Value2" }, { "nastedkey0": "Value3", "nastedkey1": "Value4", "nastedkey2": "Value5" }],
specificId = 4455;
var item = mainArray.find(x => x.id === specificId);
if (item !== undefined) {
item.newKey = nastedArray;
}
console.log(JSON.stringify(mainArray));
&#13;
答案 3 :(得分:1)
如何保持简单:)
for (var i = 0, i < mainArray.length; i++) {
if (mainArray[i].id === specificId) {
mainArray[i].newKey = nestedArray;
break;
}
}
适用于所有浏览器。