reduce高级用法
1、数组过滤 取出数组arr1中arr2数组不存在的数据
const arr1 = [0, 1, 2, 3, 4, 5];
const arr2 = [0, 4, 6, 1, 3, 9];
function difference(arr = [], oarr = []) {
return arr.reduce((t, v) => (!oarr.includes(v) && t.push(v), t), []);
};
console.log(difference(arr1, arr2));

2、数组扁平
function flats(arr = []) {
return arr.reduce((t, v) => t.concat(Array.isArray(v) ? flats(v) : v), []);
};
const arr3 = [1, 2, [3, 4, [5, 6]]];
conosle.log(flats(arr3))

3、数组去重
function Uniq(arr = []) {
return arr.reduce((t, v) => t.includes(v) ? t : [...t, v], []);
}
const arr4 = [1, 2, 3, 4, 5, 3, 3, 4, 1];
console.log(Uniq(arr5));

4、统计数组成员个数
function count(arr = []) {
return arr.reduce((t, v) => {
return t[v] = (t[v] || 0) + 1, t
}, {})
}
const arr5 = [0, 1, 1, 2, 2, 2, 3, 3, 3, 3];

5、记录数组成员位置
function position(arr = [], val) {
return arr.reduce((t, v, i) => {
v === val && t.push(i);
return t;
}, []);
}
const arr6 =[0,1,1,2,2,3,3,4];
console.log(position(arr6,1));

6、字符串翻转
function reverseStr(str = '') {
return str.split('').reduceRight((t, v) => t + v);
}
const str = 'abcdefj';
console.log(reverseStr(str))

7、根据对象数组特定的属性值进行分组
function group(arr = [], key) {
return key ? arr.reduce((t, v) => {
!t[v[key]] && (t[v[key]] = []);
t[v[key]].push(v);
return t;
}, {}) : {}
};
const arr7 = [
{ option: "A", name: "HY", age: 20 },
{ option: "B", name: "LQR", age: 24 },
{ option: "C", name: "CJ", age: 23 },
{ option: "A", name: "ZJY", age: 25 },
{ option: "B", name: "LY", age: 26 }
];
console.log(group(arr7, "option"));

8、对数组成员包含的关键字进行统计
function keyword(arr = [], keys = []) {
return keys.reduce((t, v) => {
arr.some(w => w.includes(v)) && t.push(v);
return t;
}, [])
}
const text = [
"汉皇重色思倾国,御宇多年求不得",
"杨家有女初长成,养在深闺人未识",
"天生丽质难自弃,一朝选在君王侧",
"回眸一笑百媚生,六宫粉黛无颜色",
"春寒赐浴华清池,温泉水滑洗凝脂",
"侍儿扶起娇无力,始是新承恩泽时"
];
const keyd = ["重色", "深闺", "爱情", "君王", "一笑", "清池", "恩泽"];
console.log(keyword(text, keyd));

9、反对指定的对象的键值
function getKeys(obj = {}, keys = []) {
return Object.keys(obj).reduce((t, v) => (keys.includes(v) && (t[v] = obj[v]), t), {})
}
const target = { a: 1, b: 2, c: 3, d: 4 };
const word = ["a", "d"];
console.log(getKeys(target, word));


浙公网安备 33010602011771号