Javascript 如何筛选数组并替换其中的某些值
例如,我有一个数组:Javascript 如何筛选数组并替换其中的某些值,javascript,typescript,ecmascript-6,Javascript,Typescript,Ecmascript 6,例如,我有一个数组: const mainArray = [ {name: 'Tom', age: 33, status: 0 }, {name: 'James', age: 23, status: 0}, {name: 'Bryan', age: 34, status:1 } ] 然后我有了第二个数组 const toUpdateStatus = ['Tom', 'James'] 合并两者后,数组的预期值应如下所示 const finalValue
const mainArray = [
{name: 'Tom', age: 33, status: 0 },
{name: 'James', age: 23, status: 0},
{name: 'Bryan', age: 34, status:1 }
]
然后我有了第二个数组
const toUpdateStatus = ['Tom', 'James']
合并两者后,数组的预期值应如下所示
const finalValue = [
{name: 'Tom', age: 33, status: 1 },
{name: 'James', age: 23, status: 1},
{name: 'Bryan', age: 34, status:0 }
]
到目前为止我试过的是这个
const result = toUpdateStatus.map((checked) => mainArray.filter((val) => val.name.includes(checked)));
但是如果运气不好请立即从
.map
返回一个对象,该对象具有状态
属性,该属性表示该名称是否包含在toUpdateStatus
中,并转换为一个数字:
const mainArray=[
{姓名:“汤姆”,年龄:33岁,身份:0},
{姓名:“詹姆斯”,年龄:23岁,身份:0},
{姓名:'Bryan',年龄:34岁,身份:1}
]
const toUpdateStatus=['Tom','James'];
const output=mainArray.map({name,age})=>({
名称
年龄,
状态:编号(ToUpdate状态。包括(名称))
}));
控制台日志(输出)
您可以使用名称作为值,状态作为1,快速绘制toUpdateStatus
的地图。然后从查找映射中映射原始和get()状态,如果不存在,则将其设置为零
这样一来,两个数组都不会被多次迭代
const mainArray=[{name:'Tom',年龄:33岁,状态:0},{name:'James',年龄:23岁,状态:0},{name:'Bryan',年龄:34岁,状态:1}];
const toUpdateStatus=['Tom','James'];
const stats=newmap(toUpdateStatus.Map(name=>[name,1]);
const res=mainArray.map(el=>({…el,状态:stats.get(el.name)| | 0}))
console.log(res)
与其他一些答案类似,但对对象中的字段不作任何假设,只是它们有一个名称
属性:
constupdatestatus=(main,names)=>main.map(
({name,…o})=>({name,…o,状态:Number(names.includes(name))})
)
const mainArray=[{name:'Tom',年龄:33岁,状态:0},{name:'James',年龄:23岁,状态:0},{name:'Bryan',年龄:34岁,状态:1}]
const toUpdateStatus=['Tom','James']
log(updateStatus(mainArray,toUpdateStatus))
。作为控制台包装{最小高度:100%!重要;顶部:0}
var map = {};
mainArray.forEach(v=>map[v.name] = v);
//OR
var map = mainArray.reduce((s,v)=>(s[v.name] = v, s), {});
mainArray.forEach(v=>v.status = 0);
toUpdateStatus.forEach(v=>map[v].status = 1);