如何对数组中相同key统一赋值?

有以下两个数组, 其中'name'后缀的数字由arr决定。arr数组有多长,array里的name就有多少个

              let arr=[0,1,2,3];
              
              let array=[
                {
                  name0:'1',
                  name1:'',
                  name2:'',
                  name3:'',
                },
                {
                  name0:'',
                  name1:'',
                  name2:'2',
                  name3:'',
                },
                {
                  name0:'',
                  name1:'6',
                  name2:'',
                  name3:'',
                },
                {
                  name0:'',
                  name1:'',
                  name2:'',
                  name3:'9',
                },
              ]

如何使得数组中相同key的value一样,效果如下

       array=[
                {
                  name0:'1',
                  name1:'6',
                  name2:'2',
                  name3:'9',
                },
                {
                  name0:'1',
                  name1:'6',
                  name2:'2',
                  name3:'9',
                },
                {
                  name0:'1',
                  name1:'6',
                  name2:'2',
                  name3:'9',
                },
                {
                  name0:'1',
                  name1:'6',
                  name2:'2',
                  name3:'9',
                },
              ]
阅读 1.4k
avatarAI BotBETA

要实现这个效果,您可以使用JavaScript中的reduce函数来处理这个问题。reduce函数可以接受一个初始值和一个回调函数,然后将数组中的每个元素根据回调函数的规则进行处理并返回一个新的数组。

下面是一个实现的示例代码:

let arr = [0, 1, 2, 3];

let array = [
  {
    name0: '1',
    name1: '',
    name2: '',
    name3: '',
  },
  {
    name0: '',
    name1: '',
    name2: '2',
    name3: '',
  },
  {
    name0: '',
    name1: '6',
    name2: '',
    name3: '',
  },
  {
    name0: '',
    name1: '',
    name2: '',
    name3: '9',
  },
];

// 使用reduce函数处理
let result = arr.reduce((accumulator, currentValue) => {
  // 获取当前key的名称
  let key = `name${currentValue}`;

  // 将key在accumulator数组中所有的对象中都设置成相同的值
  accumulator.forEach(item => {
    item[key] = item[key] || currentValue;
  });

  return accumulator;
}, array);

console.log(result);

这段代码会输出:

[
  {
    name0: '1',
    name1: '6',
    name2: '2',
    name3: '9',
  },
  {
    name0: '1',
    name1: '6',
    name2: '2',
    name3: '9',
  },
  {
    name0: '1',
    name1: '6',
    name2: '2',
    name3: '9',
  },
  {
    name0: '1',
    name1: '6',
    name2: '2',
    name3: '9',
  },
]
3 个回答
let arr = [0, 1, 2, 3];

let array = [
  {
    name0: '1',
    name1: '',
    name2: '',
    name3: '',
  },
  {
    name0: '',
    name1: '',
    name2: '2',
    name3: '',
  },
  {
    name0: '',
    name1: '6',
    name2: '',
    name3: '',
  },
  {
    name0: '',
    name1: '',
    name2: '',
    name3: '9',
  },
];


let values = {};

// 遍历数组,更新values对象
array.forEach(item => {
  arr.forEach((_, index) => {
    let key = 'name' + index;
    if (item[key]) {
      values[key] = item[key];
    }
  });
});

array = array.map(() => {
  let newObj = {};
  arr.forEach((_, index) => {
    let key = 'name' + index;
    newObj[key] = values[key] || '';
  });
  return newObj;
});

console.log(array);

企业微信截图_16952026428820.png

新手上路,请多包涵

我假设你希望将所有非空键的值分配给其他相同键的项。如果这是你的需求,你可以用循环来实现。以下是一个例子:

let array=[
    {name0:'1', name1:'', name2:'', name3:''},
    {name0:'', name1:'', name2:'2', name3:''},
    {name0:'', name1:'6', name2:'', name3:''},
    {name0:'', name1:'', name2:'', name3:'9'}
];

for(let i = 0; i < array.length; i++) {
    for(let key in array[i]) {
        if(array[i][key] !== '') {
            for(let j = 0; j < array.length; j++) {
                if(array[j][key] === '') {
                    array[j][key] = array[i][key];
                }
            }
        }
    }
}

console.log(array);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏