【发布时间】:2018-12-28 23:28:01
【问题描述】:
我有一个像这样的对象:
foo: {
someGuid: someString,
someGuid: someString,
someGuid: someString
}
我正在尝试找出将其作为 id/value 对的对象数组插入现有对象的最佳方法:
bar: {
someOtherInfo: someOtherValue,
someOtherInfo: someOtherValue,
baz: [
{
id: someGuid,
value: someString
},
{
id: someGuid,
value: someString
},
{
id: someGuid,
value: someString
}
]
}
我真的很想找出实现这一目标的最佳方法。我所说的“最佳”是指代码清晰性/简单性和性能(或以上所有如果可能的话)之间的良好平衡。
我知道有多种方法可以转换这些数据,所以我真的很好奇其他人想出了什么,我觉得这对我自己和其他人来说都是一个很好的学习机会。
此外,这是在 Vue 应用程序中,如果这有所作为的话。 (我不认为有特定于 vue 的方法来做到这一点,但如果有的话,我绝对有兴趣了解如何!)
到目前为止,我想出的方法还没有奏效,但这里是为那些感兴趣的人准备的。我相信我做错了(可能过于复杂)。
我的数据:
originalObject: {
someGuid: someString,
someGuid: someString,
someGuid: someString
}
newObject: {
some: null,
other: '1',
stuff: null,
irrelevant: null,
toThis: null,
problem: null,
targetArray: [
{},
],
},
我的逻辑:
someFunction() {
const foo = this.originalObject;
const bar = this.newObject.targetArray;
const fooLength = Object.keys(foo).length;
Object.keys(foo).forEach(function (key) {
for (let i = 0; i < fooLength; i++) {
const foobar = bar[i];
console.log(foobar.ItemAttributeId);
console.log(foobar.Value);
foobar.ItemAttributeId = key;
foobar.Value = foo[key];
bar.push({ ItemAttributeId: foobar.ItemAttributeId, Value: foobar.Value });
}
});
},
所以我觉得我让这变得比它需要的更复杂。此外,结果输出不正确(我以某种方式多次返回该值,但它似乎是一个随机的倍数……有时它返回 4 次,有时返回 3 次,我试图解释为什么会这样)。我觉得有一个更好的开始方式,但我错过了,现在我陷入了困境。
【问题讨论】:
-
“我知道有多种方法可以转换这些数据” - 你想出了哪些方法?到目前为止,您完成了什么,您要解决的具体问题是什么?给minimal reproducible example。对您而言,究竟什么是“良好的平衡”?对我来说,这里的“良好的学习机会”是你自己想办法的。
-
Object.entries和.map那个? -
或
Object.keys().map(),无论哪种方式,某种形式的transform object to array and return a new object for every property of the foo object -
附带说明... 一个相当常见的模式是 [to|from}pairs 函数将对象转换为数组数组:
[[someGuid, someString], [someGuid, someString], [someGuid, someString]] -
另请参阅your last effort - SO 不是代码编写服务,作为高级开发人员,您至少应该能够展示此类问题的当前实现并描述好的外观。
标签: javascript arrays vue.js ecmascript-6