Javascript - 一行提取从对象到数组的值

时间:2018-04-04 22:20:03

标签: javascript

我很简单:

我有一个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"],...],这不是我想要的,但这是一个很好的起点......

另外,如果可能的话,我正在寻找单行代码。有任何想法吗? 感谢。

2 个答案:

答案 0 :(得分:5)

使用函数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; }




答案 1 :(得分:3)

您可以使用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)