繁体   English   中英

用Js传递Json的值

[英]transfer values of Json with Js

初学者在javascript上,我有一个问题是将JSON中我的对象数组“objects1”的值传递给新对象“objects2”的键,总是在JSON中。

objects1 = [
{"name" : "Jake" , "class" : "D"},
{"name" : "Maria" , "class" : "C"},
{"name" : "Donald" , "class" : "C"},
{"name" : "Mike" , "class" : "E"},
{"name" : "Eva" , "class" : "C"}
]

objects2 = [
{"class" : "D" , "total" : "1"},
{"class" : "C" , "total" : "3"},
{"class" : "E" , "total" : "1"}
]

我此刻只设法删除重复项...

 var cache = {};
objects2 = objects1.filter(function(elem,index,array){
                return cache[elem.currency_name]?0:cache[elem.currency_name]=1;
});

您可以将Object.values()reduce()

 var data = [ {"name" : "Jake" , "class" : "D"}, {"name" : "Maria" , "class" : "C"}, {"name" : "Donald" , "class" : "C"}, {"name" : "Mike" , "class" : "E"}, {"name" : "Eva" , "class" : "C"} ] var result = Object.values(data.reduce(function(r, e) { if(!r[e.class]) r[e.class] = {class : e.class , total: 0} r[e.class].total += 1; return r; }, {})) console.log(result) 

Array#reduce与辅助对象一起使用以创建新数组:

 var arr1 = [{"name":"Jake","class":"D"},{"name":"Maria","class":"C"},{"name":"Donald","class":"C"},{"name":"Mike","class":"E"},{"name":"Eva","class":"C"}]; var helper = Object.create(null); // create an empty object var result = arr1.reduce(function(r, o) { var item = helper[o.class]; // get the item from the helper via the class if(!item) { // if the item doesn't exist item = { class: o.class, total: 0 }; // create a new item helper[o.class] = item; // add it to the helper r.push(item); // push to the result array } item.total++; // increment the total return r; }, []); console.log(result); 

使用带有数组#的Map的ES6版本减少:

 const arr1 = [{"name":"Jake","class":"D"},{"name":"Maria","class":"C"},{"name":"Donald","class":"C"},{"name":"Mike","class":"E"},{"name":"Eva","class":"C"}]; const result = [...arr1.reduce((map, o) => { const item = map.get(o.class) || { class: o.class, total: 0 }; // get the item from the map or create a new one item.total++; // increment the total return map.set(o.class, item); // set the item and return the map }, new Map()).values()]; // convert the map to values iterator, and spread to get an array console.log(result); 

你可以使用Set:

 var objects1 = [ {"name" : "Jake" , "class" : "D"}, {"name" : "Maria" , "class" : "C"}, {"name" : "Donald" , "class" : "C"}, {"name" : "Mike" , "class" : "E"}, {"name" : "Eva" , "class" : "C"} ]; var classes = new Set(objects1.map(obj => obj.class)); var objects2 = []; classes.forEach(cl => { var obj = { class: cl, total: objects1.filter(it => it.class === cl).length }; objects2.push(obj); }); console.log(objects2); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM