簡體   English   中英

在javascript中有條件地返回一個對象屬性

[英]conditionally return an object-property in javascript

所以這可能看起來像一個奇怪的問題,但請耐心等待:

我有一個簡單的字符串數組,我想將它映射到一個對象數組。 很簡單:我會寫

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'},
]

您可以將兩個對象與條件運算符一起使用。

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

或者拿Object.assign

arr.map(header => Object.assign({ header }, header !== 'test' && { sortType: 'basic' })) 

傳播短路評估結果


您可以使用擴展 ( ... ) 表達式,有條件地評估為必要的子對象 ( {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%;}

 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"}]

我知道您已經得到了一些不錯的答案,以防您更喜歡這種方法。

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"}

嘗試這個

 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"}]

您應該為該值應用邏輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM