[英]Convert associative array to standard array in Javascript
这是将关联数组“转换”为标准(基于 0 的索引)数组的最佳方法。 除了迭代和重写每个项目之外,还有其他方法吗?
我有一个数组,它是通过计算某些属性的出现次数而创建的,并且需要这种方式。 输出数组如下所示:
let ASSARR = {
"abc": { "c": 5, "p": 3 },
"def": { "c": 1, "p": 10 },
"ghi": { "c": 15, "p": 7 }
};
...所以。 我需要对其进行filter
和sort
,然后我需要将其“转换”为标准数组,因此它看起来更像这样:
let STARR = [
{ "i": "abc", "c": 5, "p": 3 },
{ "i": "def", "c": 1, "p": 10 },
{ "i": "ghi", "c": 15, "p": 7 }
];
我是否需要通过for
或类似循环进行迭代,或者是否有更有效的方法来执行此操作?
除了迭代和重写每个项目之外,还有其他方法吗?
不,您需要一个循环(在您的代码中,或者在您调用的标准库中的代码中,例如循环遍历Object.entries
的结果)。
由于无论哪种方式都是循环,我可能只编写循环(特别是这样做,您可以循环一次而不是多次)。 在这里,我假设您想要创建新对象,而不是仅仅向您拥有的对象添加i
属性(但请继续阅读):
const result = [];
for (const i in ASSARR) {
result.push({
i,
...ASSARR[i],
});
}
let ASSARR = { "abc": { "c": 5, "p": 3 }, "def": { "c": 1, "p": 10 }, "ghi": { "c": 15, "p": 7 } }; const result = []; for (const i in ASSARR) { result.push({ i, ...ASSARR[i], }); } console.log(result);
.as-console-wrapper { max-height: 100%;important; }
...但是如果您想修改现有对象:
const result = [];
for (const i in ASSARR) {
const object = ASSARR[i];
object.i = i;
result.push(object);
}
let ASSARR = { "abc": { "c": 5, "p": 3 }, "def": { "c": 1, "p": 10 }, "ghi": { "c": 15, "p": 7 } }; const result = []; for (const i in ASSARR) { const object = ASSARR[i]; object.i = i; result.push(object); } console.log(result);
.as-console-wrapper { max-height: 100%;important; }
注意:在上面,我假设没有您想要遗漏的继承但可枚举的属性。 如果有, push
送调用包装在if (Object.hasOwn(object, i))
中以跳过继承的属性。
您可以获得条目并使用键映射对象。
const object = { abc: { c: 5, p: 3 }, def: { c: 1, p: 10 }, ghi: { c: 15, p: 7 } }, array = Object.entries(object).map(([i, o]) => ({ i, ...o })); console.log(array);
.as-console-wrapper { max-height: 100%;important: top; 0; }
您可以只使用Object.entries
和Array.map
..
例如..
let ASSARR = { "abc": { "c": 5, "p": 3 }, "def": { "c": 1, "p": 10 }, "ghi": { "c": 15, "p": 7 } }; let STARR = Object.entries(ASSARR).map(([k,v]) => { return {i: k, ...v}; }); console.log(STARR);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.