Javascript 通过替换值来变异或生成新数组
我有两个阵列(长度可以是1000秒): 我希望我的阵列将状态替换为阵列2的状态。以下是输出示例:Javascript 通过替换值来变异或生成新数组,javascript,arrays,Javascript,Arrays,我有两个阵列(长度可以是1000秒): 我希望我的阵列将状态替换为阵列2的状态。以下是输出示例: [{ value: 123, status: 'demo', type: '...' }, {value: 2335, status: 'demo2', type: 'xxx' }] 正如我们所看到的,它需要从另一个数组中获取状态并替换它。最可能有效的解决方案是什么?因为这个数组可能非常大。我不知道解决这个问题的好办法。 长度和排序顺序可能不同,我需要将array1的状态替换为array2的状
[{
value: 123,
status: 'demo',
type: '...'
},
{value: 2335,
status: 'demo2',
type: 'xxx'
}]
正如我们所看到的,它需要从另一个数组中获取状态并替换它。最可能有效的解决方案是什么?因为这个数组可能非常大。我不知道解决这个问题的好办法。
长度和排序顺序可能不同,我需要将array1的状态替换为array2的状态,
通过链接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);
const输出=[];
for(设i=0;i
一个简单的for
循环可以:
for (let i = 0; i < array1.length; i++) {
array1[i].status = array2[i].status;
}
此外,我强烈建议优先考虑可读性,而不是要获得高性能,请首先将其中一个数组转换为
映射。地图查找非常高效:
const input1=[{
价值:123,
现状:1,
类型:“COD”,
},
{
价值:2335,
现状:2,
类型:“COD”,
},
{
价值:222,
现状:3,
类型:“COD”,
}
];
常量输入2=[{
id:1,
状态:“演示”
},
{
id:2,
状态:“demo2”
}, {
id:3,
状态:“demo3”
}
];
constmap2=新映射(Object.values(input2.Map)({id,status})=>[id,status]);
const output=input1.map(({status,…rest})=>{
const otherStatus=map2.get(status);
返回{…rest,status:otherStatus};
});
控制台日志(输出)代码>假定长度和排序顺序相同。不清楚他们是否在question@charlietflOP发布的内容似乎是这样的,但我会澄清它不符合顺序,没有0值…..数组2中的状态可以是任何东西谢谢你的解释,但我的值没有定义,这是我的实际数据,也许你可以查看,问题更新请参见编辑。在人们开始回答问题之前,请发布与您的实际数据相对应的数据结构。那么,您尝试了什么,即使性能不如预期。好的..我将更新我的答案。
for (let i = 0; i < array1.length; i++) {
const buffer = array1[i];
buffer.status = array2.find(x => x.id === buffer.status).status;
}