如何将新数组添加到另一个数组的特定对象中

时间:2016-03-08 14:16:32

标签: javascript angularjs json

我试图找到答案,但没有成功。

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

感谢大家的帮助!

4 个答案:

答案 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;
&#13;
&#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)

Array.prototype.find

的替代方案

如果数组中的元素满足提供的测试函数,则find()方法返回数组中的值。否则返回undefined。

(看看compatibility table!)

&#13;
&#13;
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;
&#13;
&#13;

答案 3 :(得分:1)

如何保持简单:)

    for (var i = 0, i < mainArray.length; i++) {
        if (mainArray[i].id === specificId) {
            mainArray[i].newKey = nestedArray;
            break;
        }
    }

适用于所有浏览器。