Javascript 如何更改数组的值并存储在新数组中?

Javascript 如何更改数组的值并存储在新数组中?,javascript,arrays,typescript,Javascript,Arrays,Typescript,几个小时以来,我一直在搜索SO并试图解决这个问题: 我有一个包含对象的数组。每个对象都有一个键/值对。我想更改某个键的值并将其存储在新数组中 请看看这个 数据:任意[]=[ {颜色:“棕色”,nr:1}, {颜色:“红色”,nr:2}, {颜色:“绿色”,nr:3} ] 新数据:任何[]; 正文(){ 常量数组=[]; for(设i=0;i({ 颜色:'黄色', 编号:x.nr*索引 })); 尝试使用.map函数: let newArray=data.map((x,index)=>({ 颜色:

几个小时以来,我一直在搜索SO并试图解决这个问题: 我有一个包含对象的数组。每个对象都有一个键/值对。我想更改某个键的值并将其存储在新数组中

请看看这个

数据:任意[]=[
{颜色:“棕色”,nr:1},
{颜色:“红色”,nr:2},
{颜色:“绿色”,nr:3}
]
新数据:任何[];
正文(){
常量数组=[];
for(设i=0;i
我希望newData数组会有新的值,但没有成功。 显然我做错了什么。
有人有线索吗?

尝试使用.map函数:

let newArray=data.map((x,index)=>({
颜色:'黄色',
编号:x.nr*索引
}));

尝试使用.map函数:

let newArray=data.map((x,index)=>({
颜色:'黄色',
编号:x.nr*索引
}));

此数据是一个数组。要更改对象键值,请使用
this.data[i][keyName]
而不是
this.data[keyName]

newData:any[] = []; // <-- Initiate to empty array

text (){
    const array = [];
    for (let i = 0; i < this.data.length; i++) {
        this.data[i]['nr'] = i*2;
        this.data[i]['color'] = "yellow";

        array.push(this.data[i]);
    }
    this.newData.push(...array);
    console.log(JSON.stringify(this.newData));
  }

newData:any[]=[];// 
此。数据是一个数组。要更改对象键值,请使用
this.data[i][keyName]
而不是
this.data[keyName]

newData:any[] = []; // <-- Initiate to empty array

text (){
    const array = [];
    for (let i = 0; i < this.data.length; i++) {
        this.data[i]['nr'] = i*2;
        this.data[i]['color'] = "yellow";

        array.push(this.data[i]);
    }
    this.newData.push(...array);
    console.log(JSON.stringify(this.newData));
  }

newData:any[]=[];// 我认为一个关键问题是,你是否计划对原始数组进行变异——我认为其他答案正在改变原始数组的值,在这种情况下,新数据没有意义。同样正如randomSoul所指出的,您需要深入到数组的每个元素并从那里访问属性

因此,假设您没有尝试对原始代码进行变异-这是我将按照您的代码样式执行的操作:

data:any[] = [
  { color: "brown", nr: 1},
  { color: "red", nr: 2},
  { color: "green", nr: 3}
];

newData: any[];

text() {
  // There are better ways to deep copy but out of scope...
  // Need to create new reference if we do not want to mutate original
  const array = JSON.parse(JSON.stringify(this.data));

  for (let i = 0; i < array.length; i++) {
    array[i]['nr'] = i * 2;
    array[i]['color'] = "yellow";
  }

  this.newData = array;
}
数据:任意[]=[
{颜色:“棕色”,nr:1},
{颜色:“红色”,nr:2},
{颜色:“绿色”,nr:3}
];
新数据:任何[];
正文(){
//有更好的方法进行深度复制,但超出范围。。。
//如果我们不想改变原始引用,就需要创建新引用
const array=JSON.parse(JSON.stringify(this.data));
for(设i=0;i
我认为一个关键问题是,您是否计划对原始数组进行变异-我认为其他答案正在改变原始数组的值,在这种情况下,新数据没有意义。同样正如randomSoul所指出的,您需要深入到数组的每个元素并从那里访问属性

因此,假设您没有尝试对原始代码进行变异-这是我将按照您的代码样式执行的操作:

data:any[] = [
  { color: "brown", nr: 1},
  { color: "red", nr: 2},
  { color: "green", nr: 3}
];

newData: any[];

text() {
  // There are better ways to deep copy but out of scope...
  // Need to create new reference if we do not want to mutate original
  const array = JSON.parse(JSON.stringify(this.data));

  for (let i = 0; i < array.length; i++) {
    array[i]['nr'] = i * 2;
    array[i]['color'] = "yellow";
  }

  this.newData = array;
}
数据:任意[]=[
{颜色:“棕色”,nr:1},
{颜色:“红色”,nr:2},
{颜色:“绿色”,nr:3}
];
新数据:任何[];
正文(){
//有更好的方法进行深度复制,但超出范围。。。
//如果我们不想改变原始引用,就需要创建新引用
const array=JSON.parse(JSON.stringify(this.data));
for(设i=0;i
预期结果是什么?提示:
此.data
是一个数组…它没有属性
nr
color
…它是元素do@L.Yogev为什么会出现问题?预期的结果是什么?提示:
这是一个数组,它没有属性
nr
color
…它是元素do@L.Yogev 为什么这会是一个问题?旁注-如果您键入数据对象,TypeScript确实可以帮助您,例如:data:{color:string,nr:number}[],那么要访问循环中的数据,您实际上只需执行data[i].nr,data[i].color,如果更改类型,则会出现编译时错误。旁注-TypeScript在这里确实可以帮助您,如果您键入数据对象,即:data:{color:string,nr:number}[],那么要在循环中访问,您实际上只需执行data[i].nr,data[i].color,如果您更改类型,您将得到编译时错误。这是对我来说最好的解决方案:又好又短。其他解决方案(@MrRobboto、@randomsour、@Islam)也同样有效,无论是否更改原始阵列。伟大的我用不同的解决方案更新了stackblitz。对我来说,这是最好的解决方案:又好又短。其他解决方案(@MrRobboto、@randomsour、@Islam)也同样有效,无论是否更改原始阵列。伟大的我用不同的解决方案更新了stackblitz。