维护地图函数中项目的顺序:Javascript
Maintaining order of items in the map function: Javascript
我正在尝试使用地图更改其中一个字段名称,但我发现项目的顺序正在发生变化。
var arrOfObj = [
{
name: "test1",
value: "value1"
},
{
name: "test2",
value: "value2"
}
];
function changeKeyName(arr, oldValue, newVal) {
return arr.map(item => {
item[`${newVal}`] = item[`${oldValue}`];
delete item[`${oldValue}`];
return item;
});
}
console.log(changeKeyName(arrOfObj, "name", "type"));
有什么方法可以在更改其中一个字段名称的同时保持项目的顺序。
O/P:
[{type:"test1",value: "value1"}, {type: "test2", value:"value2"}]
提前致谢
您可以使用 Object.entries
获取条目数组,然后映射它们,找到时用新密钥替换旧密钥:
var arrOfObj = [
{
name: "test1",
value: "value1"
},
{
name: "test2",
value: "value2"
}
];
const changeKeyName = (arr, oldKey, newKey) => arr.map(
item => Object.fromEntries(
Object.entries(item).map(
([key, val]) => [key === oldKey ? newKey : key, val]
)
)
);
console.log(changeKeyName(arrOfObj, "name", "type"));
(与流行的看法相反,对象 属性 顺序 是 保证 by the specification,并且已在所有环境中实施多年。但请记住这仅适用于 不是 数组索引的键 - 像 0
1
2
这样的数组索引不能相对于其他索引排序属性,它们总是首先被迭代,按数字升序)
就是说,如果编写代码时 属性 顺序无关紧要,代码通常更容易理解 - 如果您的代码依赖于特定顺序的属性,我建议重构这样 属性 顺序就无关紧要了。
map
在这里使用不正确,因为您应该始终 return 一组新的结果。
您可以这样做,您可以根据需要更改顺序:
const arrOfObj = [
{
name: "test1",
value: "value1"
},
{
name: "test2",
value: "value2"
}
];
function changeKeyName(arr, oldValue, newVal) {
return arr.map(({ [oldValue]: val, ...rest }) => {
return {
[newVal]: val,
...rest,
};
});
}
console.log(changeKeyName(arrOfObj, "name", "type"));
我正在尝试使用地图更改其中一个字段名称,但我发现项目的顺序正在发生变化。
var arrOfObj = [
{
name: "test1",
value: "value1"
},
{
name: "test2",
value: "value2"
}
];
function changeKeyName(arr, oldValue, newVal) {
return arr.map(item => {
item[`${newVal}`] = item[`${oldValue}`];
delete item[`${oldValue}`];
return item;
});
}
console.log(changeKeyName(arrOfObj, "name", "type"));
有什么方法可以在更改其中一个字段名称的同时保持项目的顺序。
O/P:
[{type:"test1",value: "value1"}, {type: "test2", value:"value2"}]
提前致谢
您可以使用 Object.entries
获取条目数组,然后映射它们,找到时用新密钥替换旧密钥:
var arrOfObj = [
{
name: "test1",
value: "value1"
},
{
name: "test2",
value: "value2"
}
];
const changeKeyName = (arr, oldKey, newKey) => arr.map(
item => Object.fromEntries(
Object.entries(item).map(
([key, val]) => [key === oldKey ? newKey : key, val]
)
)
);
console.log(changeKeyName(arrOfObj, "name", "type"));
(与流行的看法相反,对象 属性 顺序 是 保证 by the specification,并且已在所有环境中实施多年。但请记住这仅适用于 不是 数组索引的键 - 像 0
1
2
这样的数组索引不能相对于其他索引排序属性,它们总是首先被迭代,按数字升序)
就是说,如果编写代码时 属性 顺序无关紧要,代码通常更容易理解 - 如果您的代码依赖于特定顺序的属性,我建议重构这样 属性 顺序就无关紧要了。
map
在这里使用不正确,因为您应该始终 return 一组新的结果。
您可以这样做,您可以根据需要更改顺序:
const arrOfObj = [
{
name: "test1",
value: "value1"
},
{
name: "test2",
value: "value2"
}
];
function changeKeyName(arr, oldValue, newVal) {
return arr.map(({ [oldValue]: val, ...rest }) => {
return {
[newVal]: val,
...rest,
};
});
}
console.log(changeKeyName(arrOfObj, "name", "type"));