我想基于属性合并对象,我想使用此属性作为合并数组的键。 这是我的代码:
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_id: 17, name: "test", country: "US", bid: 0.02, profile_id: "1", user_id: 12}
合并工作正常但由于某些原因我无法理解我总是以empty
作为mergedProfiles
中的第一个属性,任何想法是什么?
答案 0 :(得分:3)
你可以取一个对象而不是一个数组,因为你得到一个没有使用索引的稀疏数组。
$('#txtDate').datepicker(
{
onSelect: function(dateText, inst) {
var tt = document.getElementById('txtDate').value;
var input = document.getElementById('extdays').value;
var date = new Date(tt);
var newdate = new Date(date);
newdate.setDate(newdate.getDate() + input);
var dd = newdate.getDate();
var mm = newdate.getMonth() + 1;
var y = newdate.getFullYear();
var someFormattedDate = dd + '/' + mm + '/' + y;
document.getElementById('follow_Date').value = someFormattedDate;
}
}
);
var profiles = [{ user_id: 17, name: "test", country: "US", bid: 0.02, profile_id: "1", user_id: 12 }],
mergedProfiles = {},
s;
for (s of profiles) {
if (!mergedProfiles[s.profile_id]) {
mergedProfiles[s.profile_id] = [];
}
mergedProfiles[s.profile_id].push(s);
}
console.log(mergedProfiles);
答案 1 :(得分: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)都是空的,换句话说是undefined
。在您的示例中,您正在执行与上面相同的操作,其中您的profile_id是一个大于0的整数。