在 JavaScript 中将对象数组中的值替换为另一个数组中的值

Replace values in array of object with values from another array in JavaScript

提问人:Richo 提问时间:9/7/2022 最后编辑:Richo 更新时间:9/7/2022 访问量:218

问:

这应该是一个小任务,但无法弄清楚。 我有一个名为“A”的对象数组

A = [{x:a,y:10},{x:b,y:5},{x:c,y:50}]

和一个名为“B”的数组

B = ['2022-06-15','2022-06-16','2022-06-17']

需要将 A 中 x 的值替换为 B 的值

预期输出 C

C = [{x:'2022-06-15',y:10},{x:'2022-06-16',y:5},{x:'2022-06-17',y:50}]

我正在使用 for 循环,但它更改了原始数组“A”(因为 JS 数组是按引用传递的)

const D = A; // or D = [...A]

for (let i = 0; i < D.length; i++) {
        D[i].x = B[i];
}
console.log(A);
console.log(D);
JavaScript 数组 对象 按引用传递

评论

0赞 katniss 9/7/2022
const D = [...A]以浅层复制数组。还有 ,还有更多方法可以对数组进行浅拷贝。const D = A.slice();
0赞 Barmar 9/7/2022
@kelly 他需要深度复制它。
0赞 katniss 9/7/2022
哦,是的,我得到了并换了D[i].xB[i]

答:

1赞 Barmar 9/7/2022 #1

不要复制 .循环并复制替换属性的每个对象。DAAx

const D = A.map((el, i) => ({...el, x: B[i]}));
0赞 Chris G 9/7/2022 #2

你可以用 .map() 方法做到这一点

    const A = [{
      x: 'a',
      y: 10
    }, {
      x: 'b',
      y: 5
    }, {
      x: 'c',
      y: 50
    }];

const B = ['2022-06-15', '2022-06-16', '2022-06-17'];

x表示数组中的每个元素,以及 ,您将使用它来遍历第二个数组AiindexB

const C = A.map((x, i) => ({
  x: B[i],
  y: x.y
}));

console.log(C);