我有两个对象数组:
var books = [
{ id: 1, name: 'Book A' },
{ id: 2, name: 'Book B' }
];
var cars = [
{ id: 1, name: 'Car A' },
{ id: 2, name: 'Car B' },
{ id: 3, name: 'Car C' },
];
我需要创建一个包含以下内容的字符串数组:
1.书中第一本书的名称(如果有的话)
2.汽车前两辆汽车的名称(如果有的话)
我能做到:
if (books.length > 0)
var bookA = books[0].name;
或:
if (cars.length > 1) {
var carA = cars[0].name;
var carB = cars[1].name;
}
然后构建字符串数组,但我相信可能有更好的方法来做到这一点。
答案 0 :(得分:0)
可以使用filter()和map()
var books = [
{ id: 1, name: 'Book A' },
{ id: 2, name: 'Book B' }
];
var cars = [
{ id: 1, name: 'Car A' },
{ id: 2, name: 'Car B' },
{ id: 3, name: 'Car C' }
];
var res = [books[0], cars[0], cars[1]]
.filter(e => e)// remove undefined's
.map(({name:n}) => n)
console.log(res)

答案 1 :(得分:0)
百万种方法之一。这个允许您轻松创建一个数据结构(arrayDefinition
),该数据结构配置从哪个数组获取哪个属性以及哪个索引,例如,您可以使用哪个索引。从RESTful Web服务中检索。
var books = [
{ id: 1, name: 'Book A' },
{ id: 2, name: 'Book B' }
];
var cars = [
{ id: 1, name: 'Car A' },
{ id: 2, name: 'Car B' },
{ id: 3, name: 'Car C' },
];
const arrayDefinition = [
{
source: 'books',
index: 0,
prop: 'name'
},
{
source: 'cars',
index: 0,
prop: 'name'
},
{
source: 'cars',
index: 1,
prop: 'name'
}
];
let resultArr = []
arrayDefinition.forEach(function(def) {
if (Array.isArray(window[def.source]) && window[def.source].length >= def.index) {
resultArr.push(window[def.source][def.index][def.prop])
}
})
console.log(resultArr)

答案 2 :(得分:0)
如果您使用的是ES6。您可以使用[... array1,... array2]来合并它们。因此,我将书中的第一项切片并使用map来获取仅包含字符串名称的新数组,并将其映射到结果数组。 对于汽车阵列,我切前两辆汽车并做同样的
var resultArray =[];
var books = [
{ id: 1, name: 'Book A' },
{ id: 2, name: 'Book B' }
];
var cars = [
{ id: 1, name: 'Car A' },
{ id: 2, name: 'Car B' },
{ id: 3, name: 'Car C' }
];
resultArray = [...resultArray, ...books.slice(0,1).map(v => v.name)]
resultArray = [...resultArray, ...cars.slice(0,2).map(v => v.name)]
console.log(resultArray)