从另一个数组返回部分数组 Javascript ES6 语法

Returning a partial array from another array Javascript ES6 syntax

我想 return 使用 ES6 语法从更大的原始数组中格式化部分数组:

原始数组

const books = [
    { id: 22, valid: false },
    { id: 7, valid: true },
    { id: 14, valid: false },
    { id: 1, valid: true },
]

新数组

const booksIds = [7, 1] 

要点

const validBooksIds = bookIds.map(book => book.valid ? book.id : null); 

有人有糖吗?

我会过滤,然后映射:

const books = [
  {id:22, valid:false},
  {id: 7, valid: true}, // keep this
  {id:14, valid:false},
  {id: 1, valid: true}  // keep this
];

const validBookIds = books.filter(b => b.valid).map(b => b.id);

console.log(validBookIds);

const books = [
    { id: 22, valid: false },
    { id: 7, valid: true },
    { id: 14, valid: false },
    { id: 1, valid: true },
]

const validBooksIds = books.filter((it) => it.valid).map((it) => it.id)

Reduce 可以合二为一:

const books = [
    { id: 22, valid: false },
    { id: 7, valid: true },
    { id: 14, valid: false },
    { id: 1, valid: true },
]
  
var bookIds = books.reduce((a,b)=>{if(b.valid) a.push(b.id); return a},[]); 

console.log(bookIds);

可以简化为:

var bookIds = books.reduce((a,b)=>b.valid? a.push(b.id) && a : a,[]);

但这可能有点令人困惑。

您也可以使用 Array 的 filterMap 方法创建自己的糖并使用它:

Array.prototype.filterMap = function(filterFn, mapFn) {
  return this.filter(filterFn).map(mapFn);
}

console.log(books.filterMap(b=>b.valid,b=>b.id));

可能需要进行一些检查,但您明白了。 ;-)