我想定义一个函数。将多个元素展平为一个数组的展平函数。我知道以下是不可能的,但基本上我想这样做:
var flatten = function() {
var flattened = arguments.reduce(function(acc, elem) { return acc.concat(elem) }, []);
return flattened;
};
var arr = [[1,2,3], 4, 5, [6, 7]];
console.log(flatten(arr)) // => [1,2,3,4,5,6,7]
我得到以下错误:
TypeError: arguments.reduce is not a function
var flatten = function() {
var flattened = [].reduce.call(arguments, function(acc, elem) { return acc.concat(elem) });
return flattened;
};
使用.reduce()重写.flant有什么好方法吗?
注意:我知道还有很多其他方法可以在javascript中展平数组,但是我想知道的是如何使用特定的参数来做到这一点。
您还可以通过以下方式测试元素是否为子阵列:
function flatten(arr){
var res = [];
arr.forEach(x => Array.isArray(x) ? x.forEach(y => res.push(y)) : res.push(x));
return res;
}
console.log(flatten([[1,2,3], 4, 5, [6, 7]])); // [ 1, 2, 3, 4, 5, 6, 7 ]
使用Array.prototype.concat.apply([],参数)
js lang-js prettyprint-override">function flatten() {
return Array.prototype.concat.apply([], arguments);
}
console.log(flatten([1, 2], 3, 4, [5, 6]));
首先将参数
对象转换为数组:
var flatten = function() {
var args = Array.prototype.slice.call(arguments);
var flattened = args.reduce(function(acc, elem) { return acc.concat(elem) }, []);
return flattened;
};
或者,直接在参数
对象上使用数组方法:
var flatten = function() {
var flattened = Array.prototype.reduce.call(arguments, function(acc, elem) { return acc.concat(elem) }, []);
return flattened;
};
在ES6中,您可以使用Array.from()
将任何可迭代或类似数组的对象转换为实际数组:
var flatten = function() {
var args = Array.from(arguments);
var flattened = args.reduce(function(acc, elem) { return acc.concat(elem) }, []);
return flattened;
};
使用现代语言特征更新2021:
function flatten(...args) {
return args.flat();
}
而且,如果您想将其展平到比仅向下一个级别更深的级别,则可以将深度传递到.flat(n)
(默认值为1)。
不过,由于我们现在在语言中内置了这些更现代的功能,您可能可以更直接地使用它们,而不是将它们传递给函数来处理它们,但是我们必须看到一些特定的用例来为解决您的问题的内联方法提出建议问题而不是使用这个功能。
仅供参考,有很多方法可以展平数组:
合并/展平一组数组
如何在javascript中展平嵌套数组?
在JavaScript中展平多维数组
rray.prototype.flat方法
问题内容: 只是试图在视图中显示我通过ajax从控制器获取的数组,但它显示的是[object Object],[object Object]而不是array。请在下面检查我的js文件: 问题答案: 使用转换到。 试试这个: 我认为,这对您有帮助-
我有一个带有 RestAssured 的测试自动化宠物项目,我想让它在架构上开发,以便使代码可重用,测试脚本易于阅读。我有表示API的请求和响应的类,我也有DTO类。例如,下面是一个与终结点一起使用的类: 如您所见,有一个父类< code > EndpointTechnicalSteps ,我想用它来处理来自endpoint的响应。例如,我想在< code > endpoint technical
问题内容: 我正在尝试对从Zend_DB查询返回的数组进行json_encode。 var_dump给出:(手动添加0个成员不会更改图片。) 编码后的字符串如下所示: 我需要的是: php.ini / json_encode文档说的应该是什么样子。 问题答案: 您如何设置初始阵列? 如果您将其设置为: 那么您就没有一个带有数字索引而是一个字符串的数组,并且该数组将转换为JS world中的一个对象
我在TypeScript中创建了一个对象数组: 有人能告诉我怎样才能正确地声明它的类型吗?可以内联还是需要两个定义? 我希望用类型声明替换,以便稍后的TypeScript会在我错误地使用提醒我。
我非常喜欢在Python中使用docstring来指定项目超出一定大小时的类型参数。 我很难找到用于指定参数是特定对象列表的标准,例如,在Haskell类型中,我会使用[String]或[a]。 当前标准(可由PyCharm编辑器识别): 我更喜欢什么: 选择1 选择2 我想这不是一个很好的例子——更相关的用例是列表中的对象必须是特定类型的。 更好的例子 所以,除了我饿了这一事实之外,这个例子说明
我有这个代码返回一个错误: 参数必须是实现可数的数组或对象?