gpt4 book ai didi

javascript - 将所有函数参数值转换为一个展平数组,以避免数组在另一个数组中

转载 作者:行者123 更新时间:2023-11-30 16:17:27 25 4
gpt4 key购买 nike

我在一个函数中工作,我需要将所有函数的参数转换成一个数组,即使一个参数是一个数组(或带有值列表的东西)。 我在 PHP 中需要类似 array_merge() 的东西,但不需要键,只需要我想要的值。


编辑 1:
寻找如何将对象arguments 转换为数组。我需要将所有值作为参数传递到单个数组中。如果一个或多个参数是数组或对象,则需要将其值合并到一个数组中。就像提供的示例一样。


例如:
foo('bar', function, [1,2,3], [NodeList], window);
array => ['bar', function, 1, 2, 3, , , window]

注意[NodeList],它必须变成HTMLElements。

到目前为止完成:
我已经在下面完成了这个功能,但我想知道它是否是更好的方法。任何意见/提示表示赞赏。

function toArray(obj) {
var k = Object.keys(obj);
var i = 0, l = k.length;
if (isString(obj) || l == 0 || obj === window) {
return obj;
} else {
var objs = [];
while (i < l) {
objs = objs.concat(toArray(obj[k[i]]));
i++;
}
return objs
}
}
function isString(obj){
return (typeof obj === 'string' || obj instanceof String);
}

编辑 1:
用法:

var arg1 = 'bar',
arg2 = [1,2,3],
arg3 = document.querySelectorAll('body');

foo(arg1, arg2, arg3) {
var myArray = toArray(arguments);
//myArray: ['bar', 1, 2, 3, <body>]
}

最佳答案

使用关键字arguments

http://www.w3schools.com/js/tryit.asp?filename=tryjs_function_arguments

function findMax() {
var i;
var max = -Infinity;
for (i = 0; i < arguments.length; i++) {
if (arguments[i] > max) {
max = arguments[i];
}
}
return max;
}
document.getElementById("demo").innerHTML = findMax(4, 5, 6);
<p>Finding the largest number.</p>
<p id="demo"></p>

编辑

这就是展平数组的方式。

var arg1 = document.querySelectorAll('p');
var arg2 = 3;
var arg3 = [1, 2, [3, 2, 3, [45, arg1]]];
var arg4 = function() {};
var arg5 = {
a: {
b: 3,
c: 2
}
};
var arg6 = window;

function flatten() {
/*gets all the arguments past in*/
var arrays = arguments;
var last = 0;
/*flattens the array*/
while (arrays.length != last) {
last = arrays.length;
arrays = [].concat.apply([], arrays);
}
/*maps all nodelist to an array*/
arrays = arrays.map(function(obj) {
var arg1 = [];
if (isNodeList(obj)) {
[].forEach.call(obj, function(node) {
arg1.push(node);
});
return arg1;
} else {
return obj;
}
});
/*flattens all node list arrays*/
last = 0;
while (arrays.length != last) {
last = arrays.length;
arrays = [].concat.apply([], arrays);
}
/*Returns unique array*/
return unique(arrays);
}
/*Makes array unique*/

function unique(a) {
return a.reduce(function(p, c) {
if (p.indexOf(c) < 0) p.push(c);
return p;
}, []);
}

function isNodeList(obj) {
var objType = {}.toString.call(obj);
return (objType === '[object NodeList]' ||
objType === '[object HTMLCollection]' ||
objType === '[object Object]' && /^\s?function/.test(obj.item)) && obj.length; // returns length of nodeList if true
};

document.getElementById('r').innerHTML = flatten(arg1, arg2, arg3, arg4, arg5, arg6);
<p id="s">

</p>
<p>

</p>
<span id='r'></span>

关于javascript - 将所有函数参数值转换为一个展平数组,以避免数组在另一个数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35278285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com