Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何筛选数组并替换其中的某些值_Javascript_Typescript_Ecmascript 6 - Fatal编程技术网

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);