【问题标题】:Javascript - One-liner to extract values from object to arrayJavascript - 将值从对象提取到数组的单行器
【发布时间】:2018-04-04 22:20:02
【问题描述】:

我很简单的一个:

我有一个 Javascript 对象,其中一些属性的值是数组,具有以下结构:

let obj = {emails: ["xxx@yyy.com", "qqq@www.com"], nickname: ["asdf"],...}

我需要得到一个只有值的数组,如下所示:

let obj2 = [["xxx@yyy.com"], ["qqq@www.com"], ["asdf"],...]

使用Object.values(obj),我得到[["xxx@yyy.com", "qqq@www.com"], ["asdf"],...],这不是我要找的,但它是一个很好的起点......

另外,如果可能的话,我正在寻找一个单线来做这件事。有任何想法吗? 谢谢。

【问题讨论】:

标签: javascript


【解决方案1】:

使用函数reduce 的替代方法。

这种方法从第一层添加对象和数组。

如您所见,这种方法评估对象的类型。

let obj = {emails: ["xxx@yyy.com", "qqq@www.com"], nickname: ["asdf"]}

var result = Object.values(obj).reduce((a, c) => {
  if (Array.isArray(c)) return a.concat(Array.from(c, (r) => [r]));
  return a.concat([c]);
}, []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

单行方法(不包括检查数组类型):

let obj = {emails: ["xxx@yyy.com", "qqq@www.com"], nickname: ["asdf"]},
    result = Object.values(obj).reduce((a, c) => (a.concat(Array.from(c, (r) => [r]))), []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 输出与 OP 想要的方式不匹配。
  • 一秒前编辑了问题
  • 谢谢。虽然另一个答案是单行的。
【解决方案2】:

您可以使用Object.values 获取值数组,然后使用concat 和传播语法... 获取平面数组,然后使用map 方法。

let obj = {emails: ["xxx@yyy.com", "qqq@www.com"], nickname: ["asdf"]}
const values = [].concat(...Object.values(obj)).map(e => [e])
console.log(values)

【讨论】:

  • 一秒前编辑了问题
  • 像魅力一样工作,并且在一行中。谢谢!
猜你喜欢
  • 1970-01-01
  • 2010-12-15
  • 2023-03-08
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
相关资源
最近更新 更多