繁体   English   中英

在 Javascript 中将关联数组转换为标准数组

[英]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 }
};

...所以。 我需要对其进行filtersort ,然后我需要将其“转换”为标准数组,因此它看起来更像这样:

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.entriesArray.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM