解析数组元素并分配给对象

时间:2020-07-15 11:12:27

标签: javascript regex

我有一个像["1 apple", "2 watermelon"]这样的数组,我想将其转换为像{apple: 1, watermelon: 2}这样的对象

这是我的代码,但我认为我做错了:

const object = {}
arr.forEach(a => {
    let key = a.match(/\d+/g)
    let value = a.match(/\D+/g)
    Object.assign(object, {
        key: value
    })
})

4 个答案:

答案 0 :(得分:2)

使用kubectl api-resources --verbs=list --namespaced -o name | ` %{ kubectl get $_ --show-kind --ignore-not-found -l <label>=<value> -n <namespace> } Array.map()

Object.fromEntries()

答案 1 :(得分:0)

const arr = ["1 apple", "2 watermelon"];

const object = {}
arr.forEach(a => {
    let key = a.match(/\d+/g)
    let value = a.match(/\D+/g)
    Object.assign(object, {
        [value[0]]: key[0]
    })
})

console.log(object)

值是一个数组,您需要为内部元素指定一个索引,在这种情况下,键也是变量,并且在从变量定义对象键时必须使用[]语法。

但这不是完成这项工作的最佳解决方案。

答案 2 :(得分:0)

当对正则表达式使用g标志时,它将返回一个匹配数组,因此您可以使用[0]获得第一个匹配项。要分配一个键,您不需要Object.assign

const arr = ["1 apple", "2 watermelon"];
const object = {};

arr.forEach(a => {
    let value = a.match(/\d+/g)[0];
    let key = a.match(/\D+/g)[0];
    object[key] = value;
});

这仍然存在字符串中有前导空格的问题,因此您可以说value = a.match(/\D+/g)[0].substr(1);,或者如果可以保证单词之间用空格隔开,则可以在空格上进行分割:

const arr = ["1 apple", "2 watermelon"];
const object = {};

arr.forEach(a => {
    const [value, ...keys] = a.split(" ");
    object[keys.join(" ")] = value;
});

答案 3 :(得分:0)

const arr=["1 apple", "2 watermelon"];
const object = {}
arr.forEach(item => {
    const [val,key]=item.split(' ');
    object[key]=Number(val,10);
});
console.log(object);

使用split函数在空白处分割字符串。使用数组解构来捕获组成部分(即在第一次迭代item.split(' ')中将返回['1','apple'],然后为val分配'1'和键'watermelon')。使用Number函数将字符串转换为整数(可选参数为base,此处为10)。