Javascript 在创建新数组时,试图通过比较其他两个数组的值来避免重复
我有一个应用程序,在比较一个数组中的值与另一个数组中的值之后,我需要通过推送其他两个数组中的值来创建一个新数组 例如: 从这两个数组中Javascript 在创建新数组时,试图通过比较其他两个数组的值来避免重复,javascript,arrays,Javascript,Arrays,我有一个应用程序,在比较一个数组中的值与另一个数组中的值之后,我需要通过推送其他两个数组中的值来创建一个新数组 例如: 从这两个数组中 sel[1,4]; bus[1,2,3,4,5,6]; 理想的结果是一个新的对象数组,它将填充“我的视图”中的复选框的重复项 newList[{1:true},{2:false},{3:false},{4:true},{5:false},{6:false}]; 我遇到的问题是,我的代码正在创建重复项,我不知道为什么 这是我的密码: var newLis
sel[1,4];
bus[1,2,3,4,5,6];
理想的结果是一个新的对象数组,它将填充“我的视图”中的复选框的重复项
newList[{1:true},{2:false},{3:false},{4:true},{5:false},{6:false}];
我遇到的问题是,我的代码正在创建重复项,我不知道为什么
这是我的密码:
var newList = [];
var bus = self.businesses;
var sel = self.campaign.data.businesses;
for( var b = 0; b < bus.length; b++ ){
if(sel.length > -1){
for( var s = 0; s < sel.length; s++){
if( bus[b]._id === sel[s].business_id){
newList.push({'business_id':bus[b]._id, 'name':bus[b].business_name, 'selected':true});
} else {
newList.push({'business_id':bus[b]._id, 'name':bus[b].business_name, 'selected':false});
}
}
} else {
console.log('hit else statement');
newList.push({'business_id':bus[b]._id, 'name':bus[b].business_name, 'selected':false});
}
}
var newList=[];
var bus=自营企业;
var sel=self.campaign.data.business;
对于(变量b=0;b-1){
对于(var s=0;s
我需要重新审视这件事,因为它对我来说是正确的。。。但很明显,我遗漏了一些东西。:-) 您可以在总线阵列上使用map()
方法,并使用includes()
检查sel阵列中是否存在当前值
var sel=[1,4];
var总线=[1,2,3,4,5,6];
var result=bus.map(e=>({[e]:sel.includes(e)}))
console.log(result)
您可以在总线阵列上使用map()
方法,并使用includes()
检查sel阵列中是否存在当前值
var sel=[1,4];
var总线=[1,2,3,4,5,6];
var result=bus.map(e=>({[e]:sel.includes(e)}))
console.log(result)
我建议使用另一种方法,为sel
使用一个对象,为具有值的新数组使用just iteratebus
函数getArray(项,已选){
var hash=Object.create(null);
已选定。forEach(功能(a){
hash[a]=true;
});
返回项目。映射(函数(a){
var temp={};
temp[a]=散列[a]| | false;
返回温度;
});
}
log(getArray([1,2,3,4,5,6],[1,4])
我建议使用不同的方法,为sel
使用对象,为新数组使用just iteratebus
函数getArray(项,已选){
var hash=Object.create(null);
已选定。forEach(功能(a){
hash[a]=true;
});
返回项目。映射(函数(a){
var temp={};
temp[a]=散列[a]| | false;
返回温度;
});
}
log(getArray([1,2,3,4,5,6],[1,4])代码>每次运行内部循环且ID不匹配时,您都会将selected:false
对象推送到newList
中,因此代码会产生重复:
for( var s = 0; s < sel.length; s++){
if( bus[b]._id === sel[s].business_id){
newList.push({'business_id':bus[b]._id, 'name':bus[b].business_name, 'selected':true});
} else {
// THIS LINE CAUSES THE DUPLICATES:
newList.push({'business_id':bus[b]._id, 'name':bus[b].business_name, 'selected':false});
}
}
每次运行内部循环且ID不匹配时,将selected:false
对象推送到newList
中,代码会产生重复:
for( var s = 0; s < sel.length; s++){
if( bus[b]._id === sel[s].business_id){
newList.push({'business_id':bus[b]._id, 'name':bus[b].business_name, 'selected':true});
} else {
// THIS LINE CAUSES THE DUPLICATES:
newList.push({'business_id':bus[b]._id, 'name':bus[b].business_name, 'selected':false});
}
}
这结合了Nina Scholz优雅的ES6方法和le_m更具体的解决方案,为您提供了更简洁、通用和可重复利用的解决方案
函数getArray(项,选中,[…id]=selected.map(选择器=>selector{
return[items.map((s=>a=>({
[a..\U id+a.business\U name]:美国拥有(a.\U id)
}))(新一套(编号))]];;
}
console.log(…getArray)([{
_id:1,
企业名称:“A”
}, {
_id:2,
企业名称:“B”
}, {
_id:3,
企业名称:“C”
}, {
_id:4,
企业名称:“D”
}, {
_id:5,
企业名称:“E”
}, {
_id:6,
企业名称:“F”
}], [{
_id:1,
企业名称:“A”
}, {
_id:2,
企业名称:“B”
}]));代码>这将Nina Scholz优雅的ES6方法与le_m更具体的解决方案结合起来,为您提供更简洁、通用且可重复利用的解决方案
函数getArray(项,选中,[…id]=selected.map(选择器=>selector{
return[items.map((s=>a=>({
[a..\U id+a.business\U name]:美国拥有(a.\U id)
}))(新一套(编号))]];;
}
console.log(…getArray)([{
_id:1,
企业名称:“A”
}, {
_id:2,
企业名称:“B”
}, {
_id:3,
企业名称:“C”
}, {
_id:4,
企业名称:“D”
}, {
_id:5,
企业名称:“E”
}, {
_id:6,
企业名称:“F”
}], [{
_id:1,
企业名称:“A”
}, {
_id:2,
企业名称:“B”
}]));代码>勒姆,我喜欢你的植入看起来多么干净。那是TypeScript吗?@cnak2是JavaScript。箭头函数(args)=>…
是在最近的ECMA2015(ES6)规范中引入的,可能是受到TypeScript的启发……谢谢。我在胖箭头上得到了一个意外的标记错误,这就是我问的原因。在app/scripts/controllers/mycampaign.js:75 | let businesss=self.campaign.data.businesss运行“jscs:all”(jscs)任务解析错误:意外令牌=>;76 | 77 | let result=business.map(business=>({-----------------------------------------------------^78 |'business_id':business._id,79 |'name':business.business_name,>>发现1个代码样式错误!警告:任务“jscs:all”失败。已使用--force,继续。@cnak2这可能是由过时的JSC引起的-另请参阅-我添加了一个使用传统函数代替箭头函数的变体,请参阅更新的应答谢谢!看起来是“let”关键字也会导致我的特定配置中出现错误。le_m,我喜欢你的实现看起来多么干净。这是TypeScript吗?@cnak2它是JavaScript。箭头函数(args)=>…
已经在最近的ECMA2015(ES6)中引入规范,可能是受到TypeScript的启发…谢谢。我在fat箭头上得到了一个意外的令牌错误,这就是为什么我问这个问题。运行“jscs:all”(jscs)任务parseError:unexpected token=>a