如何正确使用javascript内置的参数?

时间:2016-10-28 03:41:42

标签: javascript arguments

每个函数传递的参数数量不确定。因此我正在使用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]并将其分配给   键

但我不知道是否有比这更好的答案,而不必用索引调用每个参数

3 个答案:

答案 0 :(得分:1)

您可以使用arguments设置为spread元素后面的表达式的解构赋值,以将arguments的属性扩展为源可迭代。将目标作为数组中对象的属性返回。

&#13;
&#13;
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;
&#13;
&#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参数。