Kok*_*zzu 2 javascript arrays in-place
我想在数组中复制某些数组JavaScript,例如:
var res = [["1,2,3",100,50],["4,5",75,10],["6",20,90]];
var res2 = [];
for(var z in res) {
var row = res[z];
var keys = row[0].split(',')
for(var y in keys) {
var key = keys[y];
res2.push([key,row[1]/keys.length,row[2]/keys.length]);
}
}
/*
[ [ '1', 33.333333333333336, 16.666666666666668 ],
[ '2', 33.333333333333336, 16.666666666666668 ],
[ '3', 33.333333333333336, 16.666666666666668 ],
[ '4', 37.5, 5 ],
[ '5', 37.5, 5 ],
[ '6', 20, 90 ] ]
*/
Run Code Online (Sandbox Code Playgroud)
阵列真的非常长,是否可以就地执行此操作(res没有res2)?
您可以使用splice以下的真正就地处理res:
for (var i = 0; i < res.length; ) {
var row = res[i];
var keys = row[0].split(',')
res.splice(i, 1); // Remove old element
// Insert new elements at current position
for (var j in keys)
res.splice(i++, 0, [keys[j], row[1] / keys.length, row[2] / keys.length]);
}
Run Code Online (Sandbox Code Playgroud)
结果:
[
["1", 33.333333333333336, 16.666666666666668],
["2", 33.333333333333336, 16.666666666666668],
["3", 33.333333333333336, 16.666666666666668],
["4", 37.5, 5],
["5", 37.5, 5],
["6", 20, 90]
]
Run Code Online (Sandbox Code Playgroud)
编辑:
避免拼接的另一个技巧是扩展它的大小res并从头到尾开始填充它:
var n = res.length;
// Precalculate new length
var length = 0;
for (var i = 0; i < res.length; i++)
length += res[i][0].split(',').length;
// Change length of array
res.length = length;
// Start filling from end to start
for (var i = n - 1, k = length - 1; i >= 0; i--) {
var row = res[i];
var keys = row[0].split(',');
for (var j = keys.length - 1; j >= 0; j--)
res[k--] = [keys[j], row[1] / keys.length, row[2] / keys.length];
}
Run Code Online (Sandbox Code Playgroud)