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
是一个数组?您似乎正在将其用作查找表。请编辑您的代码,单击
,然后添加一个