Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过替换值来变异或生成新数组_Javascript_Arrays - Fatal编程技术网

Javascript 通过替换值来变异或生成新数组

Javascript 通过替换值来变异或生成新数组,javascript,arrays,Javascript,Arrays,我有两个阵列(长度可以是1000秒): 我希望我的阵列将状态替换为阵列2的状态。以下是输出示例: [{ value: 123, status: 'demo', type: '...' }, {value: 2335, status: 'demo2', type: 'xxx' }] 正如我们所看到的,它需要从另一个数组中获取状态并替换它。最可能有效的解决方案是什么?因为这个数组可能非常大。我不知道解决这个问题的好办法。 长度和排序顺序可能不同,我需要将array1的状态替换为array2的状

我有两个阵列(长度可以是1000秒):

我希望我的阵列将状态替换为阵列2的状态。以下是输出示例:

[{
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;
}