获取两个数组中

时间:2018-01-12 17:18:23

标签: javascript

我有两个对象数组:

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;
}

然后构建字符串数组,但我相信可能有更好的方法来做到这一点。

3 个答案:

答案 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)