【发布时间】:2015-06-13 07:39:48
【问题描述】:
我试图弄清楚如何合并两个对象数组。这是我需要做的:
-
field属性是每个对象的唯一标识符 - 输出只需要包含
originalArray中列出的对象 - 需要维护
localStorageArray的顺序,注意之前的要求(顺序应为:bar、foo、baz) - 输出需要包含来自
localStorageArray的以下属性值:hidden和width(field是一个让步,因为它是标识符) -
originalArray的所有其他属性都需要在输出中维护
这是我的怪癖:
outputArray.forEach(function(originalItem){
localStorageArray.forEach(function(localItem){
if(originalItem.field === localItem.field){
originalItem.hidden = localItem.hidden;
originalItem.width = localItem.width;
}
});
});
Full JS Fiddle
我能够获得所有属性,但我对如何根据localStorageArray 重新排序有点迷茫。我最初想在上一组 .forEach() 函数中这样做,但后来我想不要弄乱 forEach 循环中的顺序,因为我认为这可能会搞砸一些事情。
对我的解决方案有什么建议吗?
这是我的数组:
var originalArray = [{
field: "foo",
hidden: true,
sortable: false,
template: "<div>#=text#</div>",
width: "20px",
propA: "a",
propB: "b"
}, {
field: "bar",
hidden: false,
sortable: false,
template: "",
width: "20%",
propC: "C"
}, {
field: "baz",
hidden: false,
sortable: true,
template: "<span>#=text#</span>",
int: 3
}];
var localStorageArray = [{
field: "bar",
hidden: false,
sortable: false,
width: "100px"
}, {
field: "foo",
hidden: true,
sortable: false,
template: "<div>#=text#</div>",
width: "40px"
}, {
field: "boo",
hidden: true,
sortable: true,
template: "<div>Boo: #=text#</div>",
width: "200px"
}, {
field: "baz",
hidden: true,
template: "baz:#=text#",
width: "20px"
}];
这是我想要的输出:
var desiredArray = [{
field: "bar",
hidden: false,
sortable: false,
template: "",
width: "100px",
propC: "C"
}, {
field: "foo",
hidden: true,
sortable: false,
template: "<div>#=text#</div>",
width: "40px",
propA: "a",
propB: "b"
}, {
field: "baz",
hidden: true,
sortable: true,
template: "<span>#=text#</span>",
width: "20px",
int: 3
}];
【问题讨论】:
-
你能给出一些示例输入数据和预期输出吗?
-
你说
All other properties of originalArray need to be maintained in output但在你摆弄desiredArray包含{field: "foo", hidden: true, sortable: false, template: "<div>#=text#</div>", width: "40px", propA: "a", propB: "b"},和originalArray具有width: "20px"的值? -
@Xotic750 - 正如我的要求所说,我想保留
hidden和width与localStorageArray。width: "40px"来自localStorageArray所以我的输出确实是正确的。 -
因为天是关键的,你有没有考虑过使用对象哈希而不是数组?
-
@martypdx 我没有,但我无法控制这些对象的结构。
标签: javascript arrays object javascript-objects