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

How to add new array into specific object of another array

本文关键字:数组 另一个 对象 新数组 添加      更新时间:2023-09-26

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

json 数据的示例,假设它将被命名为 mainArray

[{
  "id": 4455,
  "key1": 44,
  "key2": 55
},
{
  "id": 1122,
  "key1": 11,
  "key2": 22
}]

数据嵌套数组的示例需要添加到 mainArray 中:

[{
  "nestedkey0": 'Value0',
  "nestedkey1": "Value1",
  "nestedkey2": "Value2"
},
{
  "nestedkey0": "Value3",
  "nestedkey1": "Value4",
  "nestedkey2": "Value5"
}]

我们必须检查 "id" 键(在 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 的答案(链接在上面)

以及来自合盛的另一种解决方案

http://jsbin.com/xaxagusuma/edit?html,js,console,output

感谢大家的帮助!

在普通的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>');

Array.prototype.find的替代方案

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

(看看兼容性表!

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));

正如你怀疑的那样,这并不难。最困难的部分是找到正确的对象来插入 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;
}

保持简单怎么样:)

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

适用于所有浏览器。