數組去重reduce()

1:Array.from()

Array.from(arrayLike[, mapFn[, thisArg]])

arrayLike
想要轉換成數組的僞數組對象或可迭代對象。
mapFn (可選參數)
如果指定了該參數,新數組中的每個元素會執行該回調函數。
thisArg (可選參數)
可選參數,執行回調函數 mapFn 時 this 對象。
返回的是新數組

例子

1:字符串

Array.from('foo'); // ["f", "o", "o"]

2:Set

let s = new Set(['foo', window]); 
Array.from(s); 
// ["foo", window]

2:Array.reduce()語法

arr.reduce(function(prev,cur,index,arr){
...
}, init);

arr 表示將要原數組;
prev 表示上一次調用回調時的返回值,或者初始值 init;
cur 表示當前正在處理的數組元素;
index 表示當前正在處理的數組元素的索引,若提供 init 值,則索引爲0,否則索引爲1;
init 表示初始值。

例子

原始數組:let newData1=[1,2,3,4,3,5,6,2];
let newData2=[
{key:1,name:“fangfang”,code:“AAAA”,achievements:80},
{key:2,name:“chenchen”,code:“BBBB”,achievements:90},
{key:3,name:“fangfang”,code:“CCCC”,achievements:86}]

1:數組求和

var sum1=newData1.reduce((prev,next)=>{return prev+next})
var sum2=newData2.reduce((prev,next)=>{return prev+next.achievements},0)

2:數組項的最大值

var  max=newData1.reduce((prev,next)=>{
	return Math.max(prev,next)
})
var  max=newData2.reduce((prev,next)=>{return Math.max(prev,next.achievements)},0)

3:數組去重

var newData = newData1.reduce((prev, next) {
    prev.indexOf(next) === -1 && prev.push(next);
    return prev;
},[]);
let obj={}
newData2 =newData2 .reduce(function(item,next){
obj[next.key]?"":obj[next.key]=true&&item.push(next);
return item;
},[])

4:數組拼接

var flattened = [[0, 1], [2, 3], [4, 5]].reduce(
  ( accumulator, currentValue ) => accumulator.concat(currentValue),
  []
);
// flattened is [0, 1, 2, 3, 4, 5]

5:數組中含有相同數量的某個值

var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];

var countedNames = names.reduce(function (allNames, name) { 
  if (name in allNames) {
    allNames[name]++;
  }
  else {
    allNames[name] = 1;
  }
  return allNames;
}, {});
// { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章