reduce用法合集

13 阅读1分钟
let arr = [1, 2, 222, 22, 2, 2];
//数组求和
console.log(arr.reduce((acc, cur) => acc + cur, 0));
//数组最大值
console.log(arr.reduce((a, b) => (a > b ? a : b)));

//统计字符串出现频率
let nams = ["tom", "tom", "jack"];

let count = nams.reduce((init, cur) => {
  init[cur] = (init[cur] || 0) + 1;
  return init;
}, {});
console.log(count);

//数组去重
console.log(
  arr.reduce((init, cur) => {
    if (!init.includes(cur)) {
      init.push(cur);
    }
    return init;
  }, [])
);

//对象数组求和
const cart = [
  { name: "apple", price: 10 },
  { name: "banana", price: 5 },
  { name: "orange", price: 8 },
];

let cnt = cart.reduce((init, cur) => {
  return init + cur.price;
}, 0);
console.log(cnt);

//用reduce实现map 效果
console.log(
  arr.reduce((init, cur) => {
    init.push(cur * 2);
    return init;
  }, [])
);

# 数组改成对象形式
//非原地
console.log(
  arr.reduce((init, cur) => {
    init.push({ name: cur });
    return init;
  }, [])
);
//原地改
arr.forEach((item, index) => {
  arr[index] = { name: item };
});

console.log(arr);


let a = [
  { tag: 1, name: "alice" },
  { tag: "str", name: "bob" },
  { tag: "哈哈", name: "jack" },
];

function fn(arr) {
  return arr.reduce((init, cur) => {
    init.push(cur.name);
    return init;
  }, []);
}

function fn1(arr) {
  return arr.map((item, index) => {
    return (item = arr[index].name);
  });
}