每个函数传递的参数数量不确定。因此我正在使用arguments对象。现在问题是,我需要在推送到数组时为每个值分配一个键。
参数值就像这样在循环中获得:arguments [i]。那么如何将每个值分配给一个键呢?
map: function() {
var mappedData = [];
for (var i = 0; i < arguments.length; i++) {
下面的控制台日志,提供所有值
console.debug(arguments[i]);
但我需要将每个值分配给如下所示的键。我是怎么做到的 请?
mappedData.push({
'id': arguments[0],
'name': arguments[1],
'text': arguments[2],
'notification': arguments[3],
'lastseen': arguments[4],
'avatar': arguments[5]
});
}
},
我自己找到了答案,即删除内部的for循环 地图功能。这样我就可以访问参数[1]并将其分配给 键
但我不知道是否有比这更好的答案,而不必用索引调用每个参数
答案 0 :(得分:1)
您可以使用arguments
设置为spread
元素后面的表达式的解构赋值,以将arguments
的属性扩展为源可迭代。将目标作为数组中对象的属性返回。
function map() {
let [id, name, text, validation, lastseen, avatar] = [...arguments];
let mappedData = [{id, name, text, validation, lastseen, avatar}];
return mappedData
}
let res = map("a", "b", "c", "d", "e", "f");
console.log(res);
&#13;
答案 1 :(得分:0)
这就是我的意思,
function map(){
var mappedData = [];
var obj = {};
for (var i = 0; i < arguments.length; i++)
{
console.log(i + " "+ arguments[i]);
if (i % 6 == 0)
obj.id = arguments[i];
if (i % 6 == 1)
obj.name = arguments[i];
if (i % 6 == 2)
obj.text = arguments[i];
if (i % 6 == 3)
obj.notification = arguments[i];
if (i % 6 == 4)
obj.lastseen = arguments[i];
if (i % 6 == 5)
{
obj.avatar =arguments[i];
mappedData.push(obj);
obj = {};
}
if(i+1 == arguments.length && (i % 6 != 5))
{
mappedData.push(obj);
}
}
return mappedData;
}
答案 2 :(得分:-1)
我没有看到背后的逻辑想要这样做。如果要传递的参数将在预定对象中使用,为什么不将opts参数传递给函数?
map: function(opts){
var mappedData = []
mappedData.push(opts)
}
称之为:
map({ ... })
当函数不需要传递给函数的参数时,应使用 arguments
参数。