如何将JS中字符串形式的对象数组转换为普通对象数组?
字符串数组转对象数组的实现方案
完全可行,以下是几种具体实现方法:
方法1:使用eval()
这是最直接的方式,但仅适用于字符串来源完全可信的场景(避免代码注入风险):
const strArr = ['{lat:52.5159, lng:13.3777}', '{lat:37.773972, lng:-122.431297}', '{lat:39.916668, lng:116.383331}']; const objArr = strArr.map(str => eval(`(${str})`)); // 输出目标数组 console.log(objArr);
注:给字符串包裹括号是为了让eval将其解析为对象表达式,而非代码块。
方法2:使用new Function()
和eval逻辑类似,但写法更灵活,同样需要注意字符串安全性:
const strArr = ['{lat:52.5159, lng:13.3777}', '{lat:37.773972, lng:-122.431297}', '{lat:39.916668, lng:116.383331}']; const objArr = strArr.map(str => new Function(`return ${str}`)()); console.log(objArr);
方法3:手动正则解析(安全首选)
如果字符串格式固定为{lat:数字, lng:数字},推荐用这种无风险的方式,无需担心代码注入:
const strArr = ['{lat:52.5159, lng:13.3777}', '{lat:37.773972, lng:-122.431297}', '{lat:39.916668, lng:116.383331}']; const objArr = strArr.map(str => { // 匹配lat后的数值 const lat = parseFloat(str.match(/lat:([\d.-]+)/)[1]); // 匹配lng后的数值 const lng = parseFloat(str.match(/lng:([\d.-]+)/)[1]); return { lat, lng }; }); console.log(objArr);
内容的提问来源于stack exchange,提问作者displayName is undefined
相关产品推荐
相关产品推荐

