gpt4 book ai didi

javascript - 通过替换值来改变或创建一个新数组

转载 作者:行者123 更新时间:2023-11-29 20:54:25 26 4
gpt4 key购买 nike

我有两个数组(长度可以是1000s):

我希望我的数组将状态替换为数组 2 的状态。这是输出示例:

[{
value: 123,
status: 'demo',
type: '...'
},
{value: 2335,
status: 'demo2',
type: 'xxx'
}]

正如我们所见,它需要从另一个数组中获取状态并替换它。对此最有效的解决方案是什么?因为这个数组可能非常大。我不知道解决这个问题的好方法。长度和排序顺序可以不同,我需要用数组 2 的状态替换数组 1 的状态,通过链接 Array1 的状态和 Array2 的 id

我的实际数据

[
{
"id": "55",
"status": "2",
"type": "COD",
"value": "5038.2",
},
{
"id": "56",
"status": "2",
"type": "COD",
"value": "5398.2",
},
{
"id": "57",
"status": "2",
"type": "COD",
"value": "10798.2",
}

]

数组 2

[
{
"id": "1",
"status": "Awaiting Confirmation",
},
{
"id": "2",
"status": "Confirmed",
},
{
"id": "3",
"status": "Awaiting Shipment",
},
{
"id": "4",
"status": "Awaiting Pickup",
},
{
"id": "5",
"status": "Shipped",
},
{
"id": "6",
"status": "Delivered",
},
{
"id": "7",
"status": "Cancelled",
},
{
"id": "8",
"status": "Refund Requested",
},
{
"id": "9",
"status": "Refunded",
}

我尝试过的事情...我使用 lodash 和 for 循环来实现这一点

const output = [];
for (let i = 0; i < array1.length; i++) {
const statuscode = array1[i].status;
const result = _.find(array2, { id: statuscode });
output.push({
value: array1[i].value,
status: result.status,
type: array1[i].type
});
}
console.log(output);

最佳答案

为了获得高性能,首先将其中一个数组转换为 Map。 map 查找非常有效:

const input1 = [{
value: 123,
status: 1,
type: 'COD',
},
{
value: 2335,
status: 2,
type: 'COD',
},
{
value: 222,
status: 3,
type: 'COD',
}
];
const input2 = [{
id: 1,
status: 'demo'
},
{
id: 2,
status: 'demo2'
}, {
id: 3,
status: 'demo3'
}
];
const map2 = new Map(Object.values(input2).map(({ id, status }) => [id, status]));
const output = input1.map(({ status, ...rest }) => {
const otherStatus = map2.get(status);
return { ...rest, status: otherStatus };
});
console.log(output);

代码可读性通常比速度更重要,但如果您愿意,您也可以将 .map 转换转换为 for 循环:

const input1 = [{
value: 123,
status: 1
},
{
value: 2335,
status: 2
},
{
value: 222,
status: 3
}
];
const input2 = [{
id: 1,
status: 'demo'
},
{
id: 2,
status: 'demo2'
}, {
id: 3,
status: 'demo3'
}
];
const map1 = new Map(Object.values(input1).map(({ value, status }) => [status, value]));
const output = [];
for (let i = 0; i < input2.length; i++) {
const { id, status } = input2[i];
output.push({ value: map1.get(id), status });
}
console.log(output);

关于javascript - 通过替换值来改变或创建一个新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50075248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com