Хорошо, я тоже хочу попробовать! Почему никто не думал о снижении? Это быстрее, чем для цикла! И более элегантно. ИМО как минимум.
Итак, я провел несколько тестов, и вот результаты:
И вот код:
1) Array.prototype.reduce()
с Array.prototype.push()
const array2 = array1.reduce((arr, obj) => {
if (obj.hasOwnProperty('town1') && obj.hasOwnProperty('town2') && obj.hasOwnProperty('value')) {
arr.push([ { name: obj.town1, value: obj.distance }, { name: obj.town2 } ])
}
return arr
}, [])
2) Array.prototype.reduce()
с Array.prototype.concat()
const array2 = array1.reduce((arr, obj) => (
(obj.hasOwnProperty('town1') && obj.hasOwnProperty('town2') && obj.hasOwnProperty('value'))
? Array.prototype.concat(arr, [[ { name: obj.town1, value: obj.distance }, { name: obj.town2 } ]])
: arr
), [])
3) Array.prototype.reduce()
с оператором спреда
array2 = array1.reduce((arr, obj) => (
(obj.hasOwnProperty('town1') && obj.hasOwnProperty('town2') && obj.hasOwnProperty('value'))
? [...arr, [ { name: obj.town1, value: obj.distance }, { name: obj.town2 } ]]
: arr
), [])
4) И @Emueeus идти. For-loop
с Array.prototype.push()
for (let i = 0; i<array1.length; i++) {
if (array1[i].hasOwnProperty('town1') && array1[i].hasOwnProperty('town2') && array1[i].hasOwnProperty('distance')) {
array2.push([{name:array1[i]['town1'], value: array1[i]['distance']}, { name: array1[i]['town2']}])
}
}
Вот тест:
http://jsfiddle.net/4bca0g2u/