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 iterate
bus

函数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 iterate
bus

函数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