Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.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_Reactjs_Ecmascript 6 - Fatal编程技术网

Javascript 从数组中筛选对象并将其指定给另一个对象

Javascript 从数组中筛选对象并将其指定给另一个对象,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,我需要从另一个数组中获取特定的对象,该数组是hexCode 这是我正在筛选的数据 { dateCreated: "2019-10-30 08:29:54 PM" 
 hexCode: "#ed4c67"
 id: 1
 leaveTag: "Vacation Leave"
 leaveTagColor: "Bara Red" } { dateCreated: "2019-10-30 08:30:05 PM"
 hexCode: "#ea2027" 
 id: 2

我需要从另一个数组中获取特定的对象,该数组是
hexCode

这是我正在筛选的数据

{
  dateCreated: "2019-10-30 08:29:54 PM" 

  hexCode: "#ed4c67"

  id: 1

  leaveTag: "Vacation Leave"

  leaveTagColor: "Bara Red"
}
{
  dateCreated: "2019-10-30 08:30:05 PM"

  hexCode: "#ea2027"
  
  id: 2

  leaveTag: "Sick Leave"
  
  leaveTagColor: "Red Pigment"
}
这是我要插入十六进制代码的数据。并映射
leaveType
,将其与上述数据进行比较。有可能吗

{
  leaveType: "Emergency Leave"
  email: "sfe.bruce.logan@gmail.com"
  hexCode: ???
}
{
  leaveType: "Sick Leave"
  email: "sfe.bruce.logan@gmail.com"
  hexCode: ???
}

您可以像下面这样简单地执行查找,但是在这种情况下时间复杂度更高(尽管可读性更高,并且没有空间复杂度)

或者,您可以从第一个数据数组创建类型为
leaveType:hexCode
的映射,然后使用该映射查找相应的值并填充第二个数组。检查@CodeManiac对这种方法的回答

const数据=[{
创建日期:“2019-10-30 08:29:54 PM”,
hexCode:#ed4c67“,
id:1,
假期标签:“假期假期”,
leaveTagColor:“巴拉红”
},
{
创建日期:“2019-10-30 08:30:05 PM”,
hexCode:#ea2027“,
id:2,
离开标签:“病假”,
叶子颜色:“红色颜料”
}]
常数arr=[{
休假类型:“紧急休假”,
电子邮件:“sfe.bruce。logan@gmail.com",
},
{
假期类型:“病假”,
电子邮件:“sfe.bruce。logan@gmail.com"
}]
arr.forEach(离开=>{
const matchedLeave=data.find(lv=>lv.leaveTag===leave.leaveType);
如果(匹配离开){
leave.hexCode=匹配的leave.hexCode;
}
});

控制台日志(arr)您可以使用
Map
Map

  • leaveTag
    映射到相应的
    hexCode
  • 循环检查数据,检查
    leaveType
    是否存在于
    Map
    中,如果存在,则使用
    Map
    中的值,否则保留原始值
const data=[{dateCreated:“2019-10-30 08:29:54 PM”,hexCode:“ed4c67”,id:1,leaveTag:“休假”,leaveTagColor:“Bara Red”},{dateCreated:“2019-10-30 08:30:05 PM”,hexCode:“ea2027”,id:2,leaveTag:“病假”,leaveTagColor:“红色颜料”}]
const desiredFormat=[{leaveType:“紧急休假”,电子邮件:“sfe.bruce。logan@gmail.com“,hexCode:”},{leaveType:“病假”,电子邮件:“sfe.bruce。logan@gmail.com,十六进制代码:'}]
const mapper=newmap(data.Map({leaveTag,hexCode})=>[leaveTag,hexCode]))
const final=desiredFormat.map({hexCode,…rest})=>{
返回{
休息
hexCode:mapper.get(rest.leaveType)| | hexCode
}
})

log(final)
我使用数组映射的方法

const obj1=[{
创建日期:“2019-10-30 08:29:54 PM”,
hexCode:#ed4c67“,
id:1,
假期标签:“假期假期”,
leaveTagColor:“巴拉红”
},
{
创建日期:“2019-10-30 08:30:05 PM”,
hexCode:#ea2027“,
id:2,
离开标签:“病假”,
叶子颜色:“红色颜料”
}]
常数obj2=[{
休假类型:“紧急休假”,
电子邮件:“sfe.bruce。logan@gmail.com",
十六进制代码:空
},
{
假期类型:“病假”,
电子邮件:“sfe.bruce。logan@gmail.com",
十六进制代码:空
}]
const result=obj2.map(项=>{
const findedHex=obj1.find(o2item=>o2item.leaveTag==item.leaveType)
item.hexCode=findedHex&&findedHex.hexCode | | null;
退货项目;
})

console.log(结果)
如果可以使用.find(),为什么要筛选[0]。筛选器返回所有值并检查数组中的每个项,。“查找”更为优化,因为它在第一次匹配时停止found@DhananjaiPai是的,我同意find的更好方法。非常感谢!!!我喜欢你的答案,因为我对你的代码做了最小的修改,而且效果很好!干杯@(眼睛;)很好,但是过多的解构会严重损害可读性
x=>[x.leaveTag,x.hexCode]
({leaveTag,hexCode})=>[leaveTag,hexCode])
更短,更容易理解。
谢谢!谢谢你的回答,但我会用大卫的回答:)谢谢!谢谢你的回答,但我会用大卫的回答:)别担心,虽然我先回答了:D,但话说回来,这不是一场比赛,我很乐意帮忙。