我正在尝试找到一种有效的方法来更改数组的长度和数组中的元素。例如,如果我有
var arr = [["Name", "Age", "Lightsaber Color"], ["Luke Skywalker", "22", "Green"], ["Yoda", "900", "Green"], ["Obi Wan Kenobi", "59", "Blue"]]
我想结束
var arr = [["Name", "Age"], ["Luke Skywalker", "22"], ["Yoda", "900"]]
我已经编写了一些代码来执行此操作,但我想确保更改嵌套数组长度的方式(由于缺乏更好的术语)尽可能高效。
我有:
var arr = [["Name", "Age", "Lightsaber Color"], ["Luke Skywalker", "22", "Green"], ["Yoda", "900", "Green"], ["Obi Wan Kenobi", "59", "Blue"]]
arr.length = 3; // Removes the Obi Wan entry
console.log(arr);
for(var i = 0; i < arr.length; i++){
arr[i].length = 2 // Removes lightsaber color
};
console.log(arr)
我希望优化的代码是 for 循环。我将使用更大的数据集。 谢谢
最佳答案
The code I'm wanting to hopefully optimize is the for loop.
如果您指的是运行时效率,那么您正在做的事情已经达到了预期的效率。任何使用其他东西的东西(比如 slice
或 map
)都会变慢。
请注意,这实际上不太重要。除非您已经确定此循环是性能障碍,否则不必担心。如果您已经发现这是一个性能障碍,则数组必须非常大。 :-) 即使您要处理 100,000 个数组,我也不认为这会花费太多时间。
让我们看看:
const now = performance.now ? performance.now.bind(performance) : Date.now.bind(Date);
// Create an array with 110k entries, each being five entries long.
const arr = Array.from({length:110000}, () => ["a", "b", "c", "d", "e"]);
// Start timing
const start = performance.now();
// Cut it down to 100k entries
arr.length = 100000;
// Trim them to two entries
for (const entry of arr) {
entry.length = 2;
}
// Done timing
const elapsed = now() - start;
console.log("Elapsed: " + elapsed + "ms");
我在使用 Brave 的工作站上得到了大约 20 毫秒的时间(与 Chrome 一样,使用 V8 作为 JavaScript 引擎)。
这不是一个严格的基准,但它给了我们一个想法......
关于javascript - 使用javascript,更改锯齿状数组中元素长度的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59950594/