NodeJS: a.filter(...).map(...) или a.forEach(...). Как правильней и/или как лучше?

Как правильней и/или как лучше?

var a=[];
... // заполнение массива некими данными
// Вариант 1: 
var sql_values='';
a.forEach( function(x){
  if( x.enabled ){
    if( sql_values ) sql_vaalues +=', ';
    sql_values += x.value;
  }
});
// Вариант 2:
sql_values = a.filter( function(x){ return x.enabled })
             .map(function(x){ return x.value })
             .join(', ');

console.log( sql_values );

Первый вариант - вроде за один цикл делает все, а второй - за 3 хоть и кода меньше немного.
Кто как поступил бы?
  • Вопрос задан
  • 2613 просмотров
Решения вопроса 1
Проблема `forEach` в том что логика усложнена конкатенацией. Вот ещё вариант с `reduce`:
sql_values = a
    .reduce(function(aggr, x){
        
        if (x.enabled)
            aggr.push(x.value)
        
        return aggr;
    }, [])
    .join(', ')
    ;

А вот и тест :jsperf
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Если производительность критична, то надо ее померять и выбрать более быстрый способ. Если нет, то выбрать более красивый и читаемый (в общем, вкусовщина, но второй способ вроде и правда красивее).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы