Javascript :高阶函数
Javascript :higher order functions
我是编码新手,正在练习高阶函数。给出以下问题:
Write a function which will split an array into two arrays (i.e.
partition it).
It will take two parameters, the first is an array of Integer values,
and the second will be a callback which will return a boolean. If the
callback returns true for an element, it should be placed into the
left array, otherwise it should be placed into the right array.
Examples:
partition([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], n => n % 2 === 0)
should look like this: [[2, 4, 6, 8, 10], [1, 3, 5, 7, 9]]
partition([-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5], n => n < 0)
should look like this: [[-5, -4, -3, -2, -1], [0, 1, 2, 3, 4, 5]]
const partition = function(arr, callback) {
// IMPLEMENT ME
};
我想到了以下内容:
const array = [];
arr.filter((integers) => {
if (integers === callback) {
array.push(integers);
return integers;
}
});
};
partition([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], (n) => n % 2 === 0);
partition([-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5], (n) => n < 0);
我卡住了,无法理解如何将 .filter
与回调一起使用,我如何使用 .filter
方式拆分它,你能用 .filter
方法指导我吗以上问题。
您需要为回调筛选 return 为真的值,并收集所有其他值和 return 一个包含筛选值和其他收集值的新数组。
const partition = function(arr, callback) { // IMPLEMENT ME
const array = [];
return [
arr.filter(value => {
if (callback(value)) return true;
array.push(value);
}),
array
];
};
console.log(partition([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], n => n % 2 === 0)); // [[2, 4, 6, 8, 10], [1, 3, 5, 7, 9]]
console.log(partition([-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5], n => n < 0)); // [[-5, -4, -3, -2, -1], [0, 1, 2, 3, 4, 5]]
Array.filter
应该接受 returns 布尔值的回调。如果回调 returns true
,它将值保留在结果数组中,如果是 returns false
,则不会将其添加到数组中。
如果你想继续使用过滤器,你所拥有的几乎可以工作,除了你正在检查每个元素和回调函数之间的严格相等性,而你应该用 callback(integer)
.
如果要使用它,还需要将过滤器的输出存储到第二个数组中。
const leftArray = [];
const rightArray = arr.filter((integer) => {
if (callback(integer)) {
leftArray.push(integer);
return false;
}
return true;
});
过滤功能只允许您return一个数组匹配一个条件。因此,如果你想用过滤函数构建两个数组,你可以这样使用:
let partition = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let evenPartition = partition.filter(x => x % 2 === 0);
let oddPartition = partition.filter(x => x % 2 !== 0);
//Even partition : [2, 4, 6, 8, 10]
//Odd partition : [1, 3, 5, 7, 9]
您还可以使用地图功能:
let partition = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let finalResult=[[], []];
partition.map(x => {
if(x % 2 === 0)
finalResult[0].push(x);
else
finalResult[1].push(x);
});
//Final result: [[2, 4, 6, 8, 10], [1, 3, 5, 7, 9]]
我是编码新手,正在练习高阶函数。给出以下问题:
Write a function which will split an array into two arrays (i.e. partition it).
It will take two parameters, the first is an array of Integer values, and the second will be a callback which will return a boolean. If the callback returns true for an element, it should be placed into the left array, otherwise it should be placed into the right array.
Examples:
partition([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], n => n % 2 === 0)
should look like this:[[2, 4, 6, 8, 10], [1, 3, 5, 7, 9]]
partition([-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5], n => n < 0)
should look like this:[[-5, -4, -3, -2, -1], [0, 1, 2, 3, 4, 5]]
const partition = function(arr, callback) { // IMPLEMENT ME };
我想到了以下内容:
const array = [];
arr.filter((integers) => {
if (integers === callback) {
array.push(integers);
return integers;
}
});
};
partition([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], (n) => n % 2 === 0);
partition([-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5], (n) => n < 0);
我卡住了,无法理解如何将 .filter
与回调一起使用,我如何使用 .filter
方式拆分它,你能用 .filter
方法指导我吗以上问题。
您需要为回调筛选 return 为真的值,并收集所有其他值和 return 一个包含筛选值和其他收集值的新数组。
const partition = function(arr, callback) { // IMPLEMENT ME
const array = [];
return [
arr.filter(value => {
if (callback(value)) return true;
array.push(value);
}),
array
];
};
console.log(partition([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], n => n % 2 === 0)); // [[2, 4, 6, 8, 10], [1, 3, 5, 7, 9]]
console.log(partition([-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5], n => n < 0)); // [[-5, -4, -3, -2, -1], [0, 1, 2, 3, 4, 5]]
Array.filter
应该接受 returns 布尔值的回调。如果回调 returns true
,它将值保留在结果数组中,如果是 returns false
,则不会将其添加到数组中。
如果你想继续使用过滤器,你所拥有的几乎可以工作,除了你正在检查每个元素和回调函数之间的严格相等性,而你应该用 callback(integer)
.
如果要使用它,还需要将过滤器的输出存储到第二个数组中。
const leftArray = [];
const rightArray = arr.filter((integer) => {
if (callback(integer)) {
leftArray.push(integer);
return false;
}
return true;
});
过滤功能只允许您return一个数组匹配一个条件。因此,如果你想用过滤函数构建两个数组,你可以这样使用:
let partition = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let evenPartition = partition.filter(x => x % 2 === 0);
let oddPartition = partition.filter(x => x % 2 !== 0);
//Even partition : [2, 4, 6, 8, 10]
//Odd partition : [1, 3, 5, 7, 9]
您还可以使用地图功能:
let partition = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let finalResult=[[], []];
partition.map(x => {
if(x % 2 === 0)
finalResult[0].push(x);
else
finalResult[1].push(x);
});
//Final result: [[2, 4, 6, 8, 10], [1, 3, 5, 7, 9]]