условно вернуть объект-свойство в javascript - PullRequest
0 голосов
/ 25 февраля 2020

Так что это может выглядеть как странный вопрос, но потерпите меня, пожалуйста:

У меня есть простой массив строк, и я хочу сопоставить его с массивом объектов. довольно просто: я бы написал

arr.map (x => ({
   header  : x,
   sortType: 'basic'
}))

сейчас, вот вопрос: я хотел бы проверить и посмотреть, имеет ли x определенное значение, тогда вообще не включать sortType. Я хотел бы сделать что-то вроде

 arr.map (x => ({
       header  : x,
       x==='test' ? (sortType: 'basic') : //don't provide anything
    }))

, поэтому я бы хотел, чтобы мой окончательный массив был примерно таким: И я не хочу иметь две карты конечно!

[
{ header: 'Header One' , sortType: 'basic'},
{ header: 'test' },
{ header: 'Another one' , sortType: 'basic'},
]

Ответы [ 5 ]

3 голосов
/ 25 февраля 2020

Вы можете использовать два объекта с условным оператором.

arr.map(header => header === 'test'
    ? { header }
    : { header, sortType: 'basic' }
)

Или взять Object.assign

arr.map(header => Object.assign({ header }, header !== 'test' && { sortType: 'basic' })) 
2 голосов
/ 25 февраля 2020

Распространение результата оценки короткого замыкания


Вы можете использовать расширение (...) выражения, которое условно преобразуется в необходимый подобъект ({sortType: 'basic'}):

const src = ['Header One','test','Another one'],
      result = src.map (header => ({
        header, 
        ...(header!=='test' && {sortType: 'basic'})
      }))
      
console.log(result)
.as-console-wrapper{min-height:100%;}
1 голос
/ 25 февраля 2020

Я знаю, что вы уже получили довольно хорошие ответы, если вы предпочитаете такой подход.

const arr = ['penguinsinpijamas', 'test'];

var mappy = arr.map(x => {
    let obj = {'header': x};
    if (obj.header === 'test') obj.sortType = 'basic';
    return obj})

mappy.forEach(m => console.log(m))

Возвращает:

Object {header: "penguinsinpijamas"}
Object {header: "test", sortType: "basic"}
1 голос
/ 25 февраля 2020
 var arr = ['test','love','javascript'];

 const output = arr.map (x => {
       const obj = {
           header  : x
       };
       if(x === "test") obj.sortType = "basic";
       return obj;
});

console.log(output);
// [{header: "test", sortType: "basic"}, {header: "love"}, {header: "javascript"}]
0 голосов
/ 25 февраля 2020

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

var arr = ['test','love','javascript'];
    var result = arr.map (x => ({
           header  : x,
           sortType: x==='test'?undefined:'basic'
        }))
    console.log(JSON.stringify(arr));
    console.log(JSON.stringify(result));

вывод:

["test","love","javascript"]
[{"header":"test"},{"header":"love","sortType":"basic"},{"header":"javascript","sortType":"basic"}]

Вы должны применить logi c для значения.

...