在Javascript中过滤数组并将其引用到对象数组

在Javascript中过滤数组并将其引用到对象数组,javascript,arrays,filter,lodash,Javascript,Arrays,Filter,Lodash,我有两个阵列: 时间戳数组: var timeStamp = [["0:00","1:00"], ["2:00","3:00"]]; 时间标签参考: var timeLabels = [ { name: "0:00", present: true, label: ["0:00", "1:00"], alterName:"" }, { name: "1:00", present: true, label: ["1:00", "2:00"], alterName:"" }, { name

我有两个阵列:

时间戳数组:

var timeStamp = [["0:00","1:00"], ["2:00","3:00"]];
时间标签参考:

var timeLabels = [
 { name: "0:00", present: true, label: ["0:00", "1:00"], alterName:"" }, 
 { name: "1:00", present: true, label: ["1:00", "2:00"], alterName:"" }, 
 { name: "2:00", present: true, label: ["2:00", "3:00"], alterName:"" }]
我想使用
Lodash
来过滤时间戳数组,但我想要的方法是对象数组独有的。我现在有一个for循环,它不是很优雅

最后,我想创建一个TimeLabels对象数组,如果时间存在于时间戳的
第一个索引中,则该数组的
present
字段设置为True或False

参考上面的时间戳数组,结果将是:

var timeResult = [
 { name: "0:00", present: true, label: ["0:00", "1:00"], alterName:"" }, 
 { name: "1:00", present: false, label: ["1:00", "2:00"], alterName:"" }, 
 { name: "2:00", present: true, label: ["2:00", "3:00"], alterName:"" }]

我更习惯使用lodash,但我想知道是否其他方法更适合构建解决方案,或者我目前使用的for循环是否可以

对于
时间标签中的每个元素
使用
indexOf
确定
标签
是否存在于
时间戳
中。要使用indexOf,必须使用
JSON.stringify()将对象转换为字符串

var tmpTimeStamp = timeStamp.map(function(ts){ return ts[0]+"_"+ts[1] });
timeResult = timeResult.map(function(t){
  t.present = tmpTimeStamp.indexOf(t.label[0]+"_"+t.label[1]) > -1;
  return t;
});
var timeLabels=[
{name:“0:00”,present:true,label:[“0:00”,“1:00]”,alterName:“},
{name:“1:00”,present:true,label:[“1:00”,“2:00]”,alterName:“},
{name:“2:00”,present:true,label:[“2:00”,“3:00]”,alterName:“}];
时间戳=[“0:00”,“1:00”],[“2:00”,“3:00”];
结果=timeLabels.forEach(函数(res){
label=JSON.stringify(res.label);//转换为字符串
ts=JSON.stringify(timeStamp);//转换为字符串
如果(ts.indexOf(label)>=0){//检查标签是否存在
res.present=真;
}
否则{
res.present=假;
}
});

控制台日志(时间标签)
对于
时间标签内的每个元素
使用
indexOf
确定
标签
是否存在于
时间戳
中。要使用indexOf,必须使用
JSON.stringify()将对象转换为字符串

var timeLabels=[
{name:“0:00”,present:true,label:[“0:00”,“1:00]”,alterName:“},
{name:“1:00”,present:true,label:[“1:00”,“2:00]”,alterName:“},
{name:“2:00”,present:true,label:[“2:00”,“3:00]”,alterName:“}];
时间戳=[“0:00”,“1:00”],[“2:00”,“3:00”];
结果=timeLabels.forEach(函数(res){
label=JSON.stringify(res.label);//转换为字符串
ts=JSON.stringify(timeStamp);//转换为字符串
如果(ts.indexOf(label)>=0){//检查标签是否存在
res.present=真;
}
否则{
res.present=假;
}
});
控制台日志(时间标签)
我们可以使用迭代并返回每个转换的
。请注意,我使用了而不是手动指定
present
属性,这是为了避免对
timeLabels
集合中的对象进行变异。最后,我们使用和的组合来获得
present
值(请注意,结果值是否定的)

var时间戳=[
["0:00", "1:00"],
["2:00", "3:00"]
];
变量时间标签=[{
名称:“0:00”,
现在:对,,
标签:[“0:00”,“1:00”],
更改名称:“
},
{
名称:“1:00”,
现在:对,,
标签:[“1:00”、“2:00”],
更改名称:“
},
{
姓名:“2:00”,
现在:对,,
标签:[“2:00”、“3:00”],
更改名称:“
}
];
var timeResult=\映射(timeLabels,函数(项){
返回{.assign({},item{
出席:!(时间戳)
.intersectionWith([item.label],u.isEqual)
.isEmpty()
});
});
console.log(timeResult)
body>div{min height:100%;top:0;}
我们可以使用迭代并返回每个转换的
。请注意,我使用了而不是手动指定
present
属性,这是为了避免对
timeLabels
集合中的对象进行变异。最后,我们使用和的组合来获得
present
值(请注意,结果值是否定的)

var时间戳=[
["0:00", "1:00"],
["2:00", "3:00"]
];
变量时间标签=[{
名称:“0:00”,
现在:对,,
标签:[“0:00”,“1:00”],
更改名称:“
},
{
名称:“1:00”,
现在:对,,
标签:[“1:00”、“2:00”],
更改名称:“
},
{
姓名:“2:00”,
现在:对,,
标签:[“2:00”、“3:00”],
更改名称:“
}
];
var timeResult=\映射(timeLabels,函数(项){
返回{.assign({},item{
出席:!(时间戳)
.intersectionWith([item.label],u.isEqual)
.isEmpty()
});
});
console.log(timeResult)
body>div{min height:100%;top:0;}

您在谈论lodash中的哪些方法?不应该有任何数组专用的。此外,在现代浏览器中,lodash中的大多数方法都可以在数组中实现,即map、reduce、filter、foreach。您在谈论lodash中的哪些方法?不应该有任何数组专用的。此外,lodash中的大多数方法都可以在现代浏览器中的数组中实现,即map、reduce、filter和forEach
var timeResult = _.map(timeLabels, function(item) {
  return _.assign({}, item, {
    present: !_(timeStamp)
      .intersectionWith([item.label], _.isEqual)
      .isEmpty()
  });
});