const fruits = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple'];
const count = fruits.reduce((accumulate, current) => {
accumulate[current] = (accumulate[current] || 0) + 1
return accumulate
}, {})
console.log(count)
let maxCount = 0;
for (let key in count) {
if (count[key] > maxCount) {
maxCount = count[key]
}
}
console.log(maxCount)
const nestedArray = [[1, [7, 8, 9], 2], [3, 4], [5, 6]];
function filterArray(paramsArray) {
return paramsArray.reduce((accumulate, current) => {
return Array.isArray(current) ? accumulate.concat(filterArray(current)) : accumulate.concat(current)
}, [])
}
const planArray = filterArray(nestedArray)
console.log(planArray)
const people = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 30 },
{ name: 'Charlie', age: 35 },
{ name: 'David', age: 25 },
{ name: 'Emily', age: 30 }
];
const output = people.reduce((acc, value) => {
let key = value.age
if (!acc[key]) {
acc[key] = [value]
} else {
acc[key].push(value)
}
return acc
}, {})
console.log(output)
const keys = ['name', 'age', 'gender'];
const values = ['Alice', 25, 'female'];
const objs = keys.reduce((acc, value, index) => {
acc[value] = values[index]
return acc
}, {})
console.log(objs)
const str = 'key1=value1&key2=value2&key3=value3';
const strObj = str.split("&").reduce((acc, value) => {
const [key, currentVal] = value.split("=")
acc[key] = currentVal
return acc
}, {})
console.log(strObj)
const params = { foo: "bar", baz: 42 };
console.log(Object.entries(params))
const paramsString = Object.entries(params).reduce((acc, value, index) => {
console.log(value, index)
const [key, currentVal] = value
return acc = acc + (index == 0 ? "" : "&") + key + "=" + currentVal
}, "?")
console.log(paramsString)
const Fibonacci = (n) => {
return [...Array(n)].reduce((acc, value, index) => {
if (index < 2) {
acc.push(index)
} else {
acc.push(acc[index - 1] + acc[index - 2])
}
return acc
}, [])
}
console.log(Fibonacci(10))
let palindromeStr = "1234321"
let palindromeArr = palindromeStr.split('')
console.log(palindromeArr)
const isPal = palindromeArr.reduce((acc, current, index, arr) => {
return acc && current == arr[arr.length - 1 - index]
}, true)
console.log("回文字符串~~~", isPal)
const strkuo = "((()))(()())";
const isKuo = strkuo.split("").reduce((acc, current) => {
if (current === "(") {
acc++
} else if (current == ")") {
acc--
}
return acc
}, 0) === 0
console.log(isKuo)
const user = {
info: {
name: "Jason",
address: { home: "Shaanxi", company: "Xian" },
},
};
const get = (config, path, defaulVal) => {
return path.split('.').reduce((config, name) => config[name], config) || defaulVal;
return callback;
}
get(user, "info.name");
get(user, "info.address.company");
get(user, "info.address.abc", "default");
console.log(get(user, "info.name"))
function myReduce(arr, callback, initialValue) {
let accumulator = initialValue == undefined ? arr[0] : initialValue;
for (let i = initialValue == undefined ? 1 : 0; i < arr.length; i++) {
accumulator = callback(accumulator, arr[i], i, arr)
}
return accumulator
}
const heArr = [0, 1, 2, 3, 4, 5]
const sumHe = myReduce(heArr, (acc, val) => {
console.log(acc, val)
acc += val
return acc
})
console.log(sumHe)