Как объединить строковые свойства массива в массив массивов и создать новое свойство в каждом массиве - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть массив массивов, который выглядит следующим образом:

UserList=[
[name:"user1", type:"admin", location:"NY", expired:"NO"],
[name:"user2", type:"poweruser", location:"CO", expired:"NO"],
[name:"user3", type:"admin", location:"SF", expired:"NO"],
]

Я хочу добавить три свойства name, type и location и создать новое свойство в каждом отдельном массиве, например, свойство «AllProps»в приведенном ниже примере:

Требуемый вывод:

UserList=[
[name:"user1", type:"admin", location:"NY", expired:"NO",AllProps:"user1adminNY"],
[name:"user2", type:"poweruser", location:"CO", expired:"NO",AllProps:"user1poweruserCO"],
[name:"user3", type:"admin", location:"SF", expired:"NO", AllProps:"user1adminSF"],
]

Могу ли я сделать это с помощью Loadash?Какой самый лучший и быстрый способ сделать это?

Ответы [ 3 ]

0 голосов
/ 25 апреля 2018

Я думаю, что-то вроде этого вам нужно:

_.forEach(UserList, function(u){
  var allPropValues = "";
  _.forOwn(u, function(value, key) {
     if(key !== 'expired') {
        allPropValues += value;
     }
  });  
  u.AllProps = allPropValues;
});

var UserList=[
{name:"user1", type:"admin", location:"NY", expired:"NO"},
{name:"user2", type:"poweruser", location:"CO", expired:"NO"},
{name:"user3", type:"admin", location:"SF", expired:"NO"},
];
console.log({before: UserList});

_.forEach(UserList, function(u){
  var allPropValues = "";
  _.forOwn(u, function(value, key) {
     if(key !== 'expired') {
        allPropValues += value;
     }
  });  
  u.AllProps = allPropValues;
});

console.log({after: UserList});
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.9/lodash.js"></script>
0 голосов
/ 25 апреля 2018

В зависимости от ваших требований и желания просто изменить существующий массив без возврата нового, просто выполните итерацию массива и добавьте пару ключ / значение:

var UserList = [
	{name: "user1", type: "admin", location: "NY", expired: "NO"},
	{name: "user2", type: "poweruser", location: "CO", expired: "NO"},
	{name: "user3", type: "admin", location: "SF", expired: "NO"},
];

UserList.forEach(function(x){
	x["AllProps"] = x.name + x.type + x.location;
});	

console.log(UserList);

Ответ с поправкой будет работать нормально, но возвращать ничего не нужно.

0 голосов
/ 25 апреля 2018

Вы используете {}, но оно должно быть [] для массива. Также вам нужно использовать : вместо = в объектах

var userList= [
{name: "user1", type: "admin", location: "NY", expired: "NO"},
{name: "user2", type: "poweruser", location: "CO", expired: "NO"},
{name: "user3", type: "admin", location: "SF", expired: "NO"}
];

var output = userList.map(user => {
   user.AllProps = user.name + user.type + user.location;
   return user;
});

// Short hand
var output = userList.map(user => ({ ...user, AllProps: user.name + user.type + user.location}));

console.log('output:', output);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...