Lodash: извлечение свойства, разбиение массива, получение уникальных значений - PullRequest
0 голосов
/ 27 июня 2018

В моем проекте JS я использую библиотеку Lodash для извлечения свойства, разделения массива, получения уникальных значений.

  var taskobj = [
      {'taskno':'a', 'team':'1,2'},
      {'taskno':'b', 'team':'3,4'},
      {'taskno':'c', 'team':'2,4'},
    ];

 //Looping through the object to convert string to array
  _.forEach(taskobj, function(value, key) {
    taskobj[key].team = _.split(taskobj[key].team,',');
  });

// using _.map to extract team and return array
// using _.flatten to flatten array
// using _.uniq to get unique values from flattned array.

return _.uniq(_.flatten(_.map(taskobj,'team')));
// logs - [1,2,3,4]

Это самый эффективный способ достижения этого?

Ответы [ 3 ]

0 голосов
/ 27 июня 2018

вы можете использовать уменьшить и начать с new Set () и добавлять значения team каждый раз (затем преобразовать его обратно в массив с помощью оператор распространения )

var taskobj = [
  {'taskno':'a', 'team':'1,2'},
  {'taskno':'b', 'team':'3,4'},
  {'taskno':'c', 'team':'2,4'},
];

var result = [...taskobj.reduce((acc, {team}) => {
  team.split(',').forEach(e => acc.add(e))
  return acc
}, new Set())]

console.log(result)
0 голосов
/ 27 июня 2018

Этого можно достичь, используя lodash#flatMap с итератором, который разбивает строку team на массив, который затем сглаживается упомянутой функцией и затем использует lodash#uniq, чтобы получить окончательный результат.

var result = _.uniq(_.flatMap(taskobj, ({ team }) => team.split(',')));

var taskobj = [
    {'taskno':'a', 'team':'1,2'},
    {'taskno':'b', 'team':'3,4'},
    {'taskno':'c', 'team':'2,4'},
];

var result = _.uniq(_.flatMap(taskobj, ({ team }) => team.split(',')));

console.log(result);
.as-console-wrapper{min-height:100%;top:0}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
0 голосов
/ 27 июня 2018

Использовать более простую версию

попробуйте это

var teams = [];
var taskobj = [
      {'taskno':'a', 'team':'1,2'},
      {'taskno':'b', 'team':'3,4'},
      {'taskno':'c', 'team':'2,4'},
    ];

taskobj.map(obj => {
  var teamSplit = obj.team.split(',');
  teams = [...teams, ...teamSplit];
})

var uniqTeams = _.uniq(teams);
console.log('teams', teams);
console.log('uniqTeams', uniqTeams)

JsBin ссылка http://jsbin.com/bedawatira/edit?js,console

...