首页 > 解决方案 > 根据另一个数组中值的存在向对象数组添加属性

问题描述

我有一个数组要与主数组一起检查,

const arrayToCheck = ['a', 'b', 'c', 'd'];

这是主数组,

const mainArray = [ {name:'alex', code: 'c'}, 
                    {name:'jack', code: 'd'}, 
                    {name:'john', code: 'n'}, 
                    {name:'mike', code: 'l'}
                  ]

我想根据 arrayToCheck 中的值向 mainArray 添加一个状态属性,其键为“启用”或“禁用”。

所以输出应该是

[ {name:'alex', code: 'c', status: 'enable'}, 
  {name:'jack', code: 'd', status: 'enable'}, 
  {name:'john', code: 'n', status: 'disable'}, 
  {name:'mike', code: 'l', status: 'disable'}
]

我已经尝试了 map 和一些来获得所需的输出,但没有成功,

这是我尝试过的,

const output = this.mainArray.map( (fil, i) => {
          return arrayToCheck.some( s => {
            if (s === fil.Code) {
              this.mainArray[i].Status = 'enable'
            } else {
              this.mainArray[i].Status = 'disable'
            }
          })
        });

标签: javascripttypescriptecmascript-6

解决方案


您可以使用mapmethod withincludes和 spread syntax ...。此解决方案返回的对象数组并且不修改原始数组。

const arrayToCheck = ['a', 'b', 'c', 'd'];
const mainArray = [ {name:'alex', code: 'c'}, {name:'jack', code: 'd'}, {name:'john', code: 'n'}, {name:'mike', code: 'l'}]

const result = mainArray.map(e => ({...e, status: arrayToCheck.includes(e.code) ? "enable" : "disable"}))
console.log(result)


推荐阅读