我有一个要检查的主数组,
const arrayToCheck = ['a', 'b', 'c', 'd'];
这是Main数组,
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'
}
})
});
答案 0 :(得分:3)
您可以将map
方法与includes
一起使用,并扩展语法...
。此解决方案返回 new 对象数组,并且不修改原始数组。
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)
答案 1 :(得分:2)
有几件事:
JavaScript是区分大小写的。 Code
和code
是不同的属性。
您不会从map
回调中返回任何内容,因此map
不是正确的工具。如果您只想循环浏览,请使用循环或forEach
。
使用some
的返回值,而不要在其回调中执行if
。 但是,这里不需要some
,因为可以使用includes
。
假设您想做的是在问题中所做的事情(修改现有对象,而不是创建新对象):
const arrayToCheck = ['a', 'b', 'c', 'd'];
const mainArray = [ {name:'alex', code: 'c'}, {name:'jack', code: 'd'}, {name:'john', code: 'n'}, {name:'mike', code: 'l'}];
mainArray.forEach(entry => {
entry.status = arrayToCheck.includes(entry.code) ? "enable" : "disable";
});
console.log(mainArray);
如果您想创建新对象,Nenad's answer向您展示了如何做到这一点。但是我从你的问题中得不到答案。
答案 2 :(得分:1)
以下是易于理解的代码:
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 output = mainArray.map(obj => {
obj.status = arrayToCheck.indexOf(obj.code) < 0 ? 'disable' : 'enable';
return obj;
})
console.log(output);