如何将数组的值添加到对象

时间:2015-08-18 16:02:10

标签: javascript arrays

我已经获得了在=行的if符号处分割键和值的代码,问题是我的行数超过=

例如:

user = aaaa
userb = bbbb
userc = test
userd = foo = bar = test 

我使用节点fs 读取文件,并将其分为=处的键和值,因此userd会导致问题。

我正在使用var array = line.split('=');

然后我将它分配给循环中的对象

myobj = {}

myobj[array[0]] = array[1];

这是有效的(我的 obj 循环中包含所有用户),直到我到达userD。 那么如何将userD的所有值连接到 myObj

3 个答案:

答案 0 :(得分:4)

如果我们假设之后第一个=符号的所有内容都是值,那么无论是否有另一个=符号,您都可以执行此操作:

myobj[array[0]] = array.slice(1).join(' = ');

现在,如果您希望将其简单存储为具有相等值的数组,则可以执行以下操作:

myobj[array[0]] = array.slice(1);

slice函数从传递的元素开始返回相同的数组(它做的更多,但这就是它的用途)。

更新我没有想到this的答案,但它甚至更快了!

答案 1 :(得分:3)

查看Array.prototype.shift()

myobj[array.shift()] = array;

Array.prototype.splice()不同,shift()不会创建一个全新的数组,以便包含我们尝试提取的一个值。请参阅我的评论here

以下是performance test的结果;它显示每秒操作数(更高更好):

UserAgent                                       shift       slice       splice
Chrome 44.0.2403                                4,290,938   3,993,798   1,042,423
Chrome 46.0.2468                                3,631,277   4,020,712   1,098,866
Firefox 38.0                                    1,706,068   1,419,219   895,714
Firefox 40.0                                    1,739,110   1,508,623   955,794
IE 11 in Compatibility Mode 10.0.0              3,393,698   2,855,417   1,721,229
Total                                           14,761,091  13,797,769  5,714,026

根据这些结果,shift()是最快的slice()。另一方面,splice()比两者慢得多......主要是因为它不适合这项特殊任务。

那说,我很惊讶。我希望this answer成为最快的。

答案 2 :(得分:2)

使用拼接功能:

myobj[array.splice(0, 1)] = array;

这将从数组中删除第一个项目并将其作为myobj参数返回,其余部分将保留在数组中,因此您可以使用数组作为对象属性,或者让我们说它加入它到一个字符串:

myobj[array.splice(0, 1)] = array.join(", ");