我已经获得了在=
行的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
答案 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()
比两者慢得多......主要是因为它不适合这项特殊任务。
答案 2 :(得分:2)
使用拼接功能:
myobj[array.splice(0, 1)] = array;
这将从数组中删除第一个项目并将其作为myobj参数返回,其余部分将保留在数组中,因此您可以使用数组作为对象属性,或者让我们说它加入它到一个字符串:
myobj[array.splice(0, 1)] = array.join(", ");