【问题标题】:JavaScript partial match object property in loop?循环中的JavaScript部分匹配对象属性?
【发布时间】:2020-08-02 22:48:35
【问题描述】:

如何转换这个对象数组

const arr = [{
  my_first_name_1: {
    value: 'jane'
  },
  my_last_name_1: {
    value: 'anderson'
  }
}, {
  my_first_name_2: {
    value: 'alex'
  },
  my_last_name_2: {
    value: 'johnson'
  }
}]

喜欢这个吗?

[{
  "first_name": "jane",
  "last_name": "anderson",
}, {
  "first_name": "alex",
  "last_name": "johnson",
}]

我一直无法将属性与部分字符串匹配

const result = arr.reduce((accum, obj) => {
   obj.match(first_name)  //how to do partial matching? Tried .includes but it doesn't work
}, [])

【问题讨论】:

  • 你能改变那个“怪物”的来源吗?

标签: javascript arrays node.js reactjs ecmascript-6


【解决方案1】:

您可以使用.map()template literals 来实现,请参阅文档:

map() 方法创建一个新数组,其中填充了对调用数组中的每个元素调用提供的函数的结果。

模板文字是允许嵌入表达式的字符串文字。您可以使用多行字符串和字符串插值功能。

尝试如下:

const arr = [{ my_first_name_1: { value: 'jane' }, my_last_name_1: { value: 'anderson'} }, { my_first_name_2: { value: 'alex' }, my_last_name_2: { value: 'johnson' } }];
  
const result = arr.map((e, i) => ({
  first_name: e[`my_first_name_${i + 1}`].value,
  last_name: e[`my_last_name_${i + 1}`].value
}))

console.log(result);

我希望这会有所帮助!

【讨论】:

  • 模板字符串比简单的字符串连接没有优势:"my_first_name_" + (i + 1)
  • @Andreas 没错,但出于某种原因,我喜欢使用它们来代替连接字符串。也许这只是个人喜好。
【解决方案2】:

如果您的密钥不是连续的,您可以使用.map()Object.values().map() 方法将遍历数组中的每个对象,然后您可以获得使用 Object.values() 的值。从值数组(即对象)中,您可以destructure 对象value 属性并将它们别名为first_namelast_name。然后,您可以将这两个解构值作为对象返回:

const arr = [{ my_first_name_1: { value: 'jane' }, my_last_name_1: { value: 'anderson' } }, { my_first_name_2: { value: 'alex' }, my_last_name_2: { value: 'johnson' } }];

const res = arr.map(obj => {
  const [{value: first_name}, {value: last_name}] = Object.values(obj); 
  return {first_name, last_name};
});

console.log(res);

【讨论】:

    【解决方案3】:

    你也可以得到每个对象的键,然后用reduce()得到它们的值

    const arr = [{
        my_first_name_1: {
          value: "jane",
        },
        my_last_name_1: {
          value: "anderson",
        },
      },
      {
        my_first_name_2: {
          value: "alex",
        },
        my_last_name_2: {
          value: "johnson",
        },
      },
    ];
    
    let result = arr.reduce((p, c) => {
      let [first, last] = Object.keys(c);
      return [...p, {
        first_name: c[first].value,
        last_name: c[last].value,
      }];
    }, []);
    
    console.log(result);

    【讨论】:

      猜你喜欢
      • 2018-11-18
      • 1970-01-01
      • 2017-09-12
      • 2014-02-21
      • 1970-01-01
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 2018-01-20
      相关资源
      最近更新 更多