使用此数组:
var booksStudents = [
{
name: "David",
books: {
"fantasy": 23,
"action": 31,
"thriller" 21,
}
},
name: "Paul",
books: {
"fantasy": 17,
"action": 13,
"thriller" 23,
}
},
name: "Zoe",
books: {
"fantasy": 5,
"action": 7,
"thriller" 28,
}
}];
我想返回一个对象数组,每个对象包含一个人的名字和所有各自书籍的总和。
我知道如何在一个简单的数组上使用reduce方法,但我坚持使用这个对象数组。
我在考虑使用.map
和.reduce
,但我找不到有趣的东西。
答案 0 :(得分:0)
booksStudents = booksStudents.map(function(item){
var count = 0;
for(var key in item.books){
count+=item.books[key];
}
item.count = count;
return item;
})
使用map和for..in计算数字。
答案 1 :(得分:0)
首先,你的对象数组中几乎没有错误,让我指出它们。
var booksStudents = [
{
name: "David",
books: {
"fantasy": 23,
"action": 31,
"thriller": 21, // : missing
}
},
{ // { missing
name: "Paul",
books: {
"fantasy": 17,
"action": 13,
"thriller": 23, // : missing
}
},
{ // { missing
name: "Zoe",
books: {
"fantasy": 5,
"action": 7,
"thriller": 28, // : missing
}
}];
所以现在解决这个问题后,使用此代码来获得最终结果的解决方案。
var newArray = [];
$.each(booksStudents,function(index,value){
var currObj = {};
currObj.name= this.name;
currObj.totalBooks = parseInt(this.books.fantasy) +parseInt(this.books.action)+parseInt(this.books.thriller) ;
newArray.push(currObj);
});
console.log(newArray);
这是一个Wroking Fiddle检查控制台,用于输出
输出如下。