gpt4 book ai didi

javascript - 用于初始化给定长度数组的模板文字

转载 作者:行者123 更新时间:2023-11-30 11:15:57 24 4
gpt4 key购买 nike

我碰到了 this question (如何初始化像 [{id: 1},{id: 2},...] 这样的数组)。

接受的答案是:

let sampleData = Array.from({length: 10}, (_, i) => ({id:i}))

console.log(sampleData)

还有很多其他的。
不过,我想到了template literals作为解决方案,但我不知道如何让它发挥作用。

我目前拥有的是:

var i = 0;
var arr = `[${"{id:++i},".repeat(10)}]`
console.log("As a string",arr);
console.log("Evaluated",eval(arr));

但是,它使用了 eval,我知道这是错误的。

我也试过

var i = 0;
var arr = `[${"{id:${++i}},".repeat(10)}]`
console.log(arr);

但我还没有以某种方式调用此字符串的反引号(类似于 arr 上的 TemplateLiteralFunction.call),以解析这些表达式。
我没有编写标记函数,而是编写了一个名为 initArray(ofLength) 的函数。

那么,无论如何,您是否可以使用不带 eval 或标记函数的模板文字,并获得一个给定长度的数组,其中填充了值?也许以某种方式嵌套模板文字?

最佳答案

您可以使用 Function constructor

The Function constructor creates a new Function object. Calling the constructor directly can create functions dynamically, but suffers from security and similar (but far less significant) performance issues similar to eval. However, unlike eval, the Function constructor allows executing code in the global scope, prompting better programming habits and allowing for more efficient code minification.

var template = `[${"{\"id\":${++i}},".repeat(10)}]`
template = template.replace(/,]$/,']'); //replace last comma

var parser = new Function("{i}", "return `" + template + "`;");
var arr = parser({i:0});
console.log(JSON.parse(arr));

关于javascript - 用于初始化给定长度数组的模板文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51533791/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com