从另一个数组返回部分数组 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));
可能需要进行一些检查,但您明白了。 ;-)
我想 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));
可能需要进行一些检查,但您明白了。 ;-)