在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()
});
});