Skip to content

Js高手进阶 —— reduce方法高级用法 #14

@Heqingsong

Description

@Heqingsong

JSON对象属性求和

var array = [
  {name: '小米', age: 4},
  {name: '京东', age: 8},
  {name: '淘宝', age: 10},
  {name: '腾讯', age: 12}
];

array.reduce(function(prev, next) {
 return next.age + prev;
}, 0);

// 34

数组去重

var array = [1, 2, 3, 5, 7, 3, 5, 8, 9, 3, 1, 0];

array.reduce(function(prev, next) {
 if(!prev.includes(next)) {
	return prev.concat(next);
 } else {
	return prev;
 }
}, []);

// [1, 2, 3, 5, 7, 8, 9, 0]

求字符串词频

var str = 'huihifdsahuihuinwfejbjbjhjsfqwennmbhcxzyuiyrweioos'.split('');

str.reduce(function(prev, next) {
	if(next in prev) {
		prev[next]++;
	} else {
		prev[next] = 1;
	}

	return prev;
}, {});

// {"h":6,"u":4,"i":6,"f":3,"d":1,"s":3,"a":1,"n":3,"w":3,"e":3,"j":4,"b":3,"q":1,"m":1,"c":1,"x":1,"z":1,"y":2,"r":1,"o":2}

多维数组转一维数组

var array = [ [0, 1], [2, 3], [4, [5, 6, 7] ] ]
const newArr = function(array) {
   return array.reduce((prev, next) => prev.concat(Array.isArray(next) ? newArr(next) : next), []);
}
console.log(newArr(array)); // [0, 1, 2, 3, 4, 5, 6, 7]

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions