【问题标题】:JS/jQuery merge array into another array's objectJS/jQuery 将数组合并到另一个数组的对象中
【发布时间】:2013-04-22 16:02:46
【问题描述】:

如何将一个数组添加到另一个数组的对象中?

我有以下数组:

projectSave = ({ id: 1, name: 'Foo', desc: 'Bar', boards: {}, hotspots {} });

我想用来自不同数组的数据填充 boardshotspots 对象。

allBoards = {id: 'b1, name: 'Board 1'; id: 'b2, name: 'Board 2'}
allHotspots = {id: 'h1, type: 'link'; id: 'h2, type: 'link'}

如何将数据填充到数组的对象中?

提前非常感谢!

【问题讨论】:

  • 如果某个答案解决了您的问题,请务必投票并接受它。

标签: javascript jquery arrays merge


【解决方案1】:

首先,allBoards 应该是:

allBoards = [{id: 'b1, name: 'Board 1'}, {id: 'b2, name: 'Board 2'}]; 

{} 之间的所有内容都被视为对象。在 [] 内部是什么使它成为这些对象的数组。这使它成为对象 {} 的数组 []。 allHotSpots 应该以同样的方式完成。

您必须遍历数组并为projectSave 重新创建对象,并将它们添加到boardshotspots 数组中。

for (var i = 0; i<allBoards.length; i++){
  projectSave.boards.push({id: allBoards[i].id,
                name: allBoards[i].name});

}
for (var i = 0; i<allHotspots .length; i++){
  projectSave.hotspots .push({id: allHotspots [i].id,
                type: allHotspots [i].type});
}

如果您只是尝试设置projectSave.boards = allBoards,您只是在存储引用,而不是数组的副本。如果这是你经常做的事情,你可能会更好地创建一个克隆方法。

【讨论】:

  • 如果 allboards 和 allHotpots 的长度总是相同的,你可以在一个循环中做到这一点。
【解决方案2】:

我不禁注意到您在代码中存在语法错误,字符串未正确关闭,分号用作数组分隔符而不是逗号,并且某些属性应该是数组而不是对象(我假设是你的意图),所以我也更正了它们。

而且由于您也将其标记为 jQuery,并且如果您的对象逐渐变得更加复杂,这里有一个 jQuery 方法来做到这一点。

var projectSave = { id: 1, name: 'Foo', desc: 'Bar', boards: [], hotspots: [] };

var allBoards = [{id: 'b1', name: 'Board 1'}, {id: 'b2', name: 'Board 2'}];

var allHotspots = [{id: 'h1', type: 'link'}, {id: 'h2', type: 'link'}];


$.extend(true, projectSave, {
    boards: allBoards,
    hotspots: allHotspots
});

// Test
console.info(projectSave);

【讨论】:

    【解决方案3】:

    你试过了吗

    projectSave.boards= allBoards;
    projectSave.hotspots=allHotspots;
    

    【讨论】:

    • 哇,花了一个小时尝试使它与 .push 或 .concat 一起工作...非常感谢您的快速回复,它工作正常。
    • 除非我弄错了,否则这样做不会在您的对象中创建数组的副本,而是对该数组的引用。你不想那样做。
    • 如果您想避免由于不情愿地更改对象而可能出现的复制问题,可以通过...实现原始问题并没有说明将其复制到... projectSave.boards= allBoards; projectSave.hotspots=allHotspots;然后 allBoards=null; allHotspots=null;
    • "如何将一个数组添加到另一个数组的对象中?"告诉我他想要将一个数组的项目添加(复制)到另一个数组。
    猜你喜欢
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多