Javascript “不需要的”;“空的”;合并对象后的属性

Javascript “不需要的”;“空的”;合并对象后的属性,javascript,Javascript,我希望基于属性合并对象,并希望使用此属性作为合并数组的键。 这是我的密码: let mergedProfiles = []; for (let set of profiles) { if (Object.keys(mergedProfiles).indexOf(String(set.profile_id)) >= 0) { // if profile id exists mergedProfiles[set.profile_id].push(set);

我希望基于属性合并对象,并希望使用此属性作为合并数组的键。 这是我的密码:

 let mergedProfiles = [];
  for (let set of profiles) {
      if (Object.keys(mergedProfiles).indexOf(String(set.profile_id)) >= 0) { // if profile id exists
          mergedProfiles[set.profile_id].push(set);
      } else {
          mergedProfiles[set.profile_id] = [];
          mergedProfiles[set.profile_id].push(set);
      }
  }
配置文件对象示例:
{user\u id:17,name:“test”,country:“US”,bid:0.02,profile\u id:“1”,user\u id:12}


合并工作正常,但由于某些原因,我无法理解我总是以
empty
作为我在
mergedProfiles
中的第一个属性,你知道我在做什么吗?

你可以用一个对象代替数组,因为你得到的是一个稀疏数组,没有使用索引

var profiles=[{user\u id:17,name:“test”,country:“US”,bid:0.02,profile\u id:“1”,user\u id:12}],
mergedProfiles={},
s
适用于(个或多个配置文件){
如果(!mergedProfiles[s.profile\u id]){
合并配置文件[s.profile_id]=[];
}
合并配置文件[s.profile\u id]。推送;
}
console.log(合并数据配置文件)

.as console wrapper{max height:100%!important;top:0;}
您需要将结果存储在对象中,以便按键引用

const allProfiles = {};
for(let set of profiles) {
    if(typeof allProfiles[set.profile_id] === "undefined") {
        allProfiles[set.profile_id] = [set];
    }
    else {
        allProfiles[set.profile_id].push(set);
    }
}
第一个元素为空的原因是您声明了一个空的JavaScript数组,然后未能初始化所有元素

如果你这样做

var someArray = [];
someArray[5] = 10;
console.log(someArray); // [empty × 5, 5]

然后,结果是一个稀疏数组,其中前5个元素(0-4)全部为空,或者换句话说
未定义
。在您的示例中,您正在执行与上面相同的操作,其中您的profile_id是大于0的某个整数

为什么
mergedProfiles
是一个数组?您似乎正在将其用作查找表。请编辑您的代码,单击
,然后添加一个