2017-08-12 67 views
0

我依稀記得一個JavaScript語法,看起來像這樣:是否存在JavaScript語法?

foo = bar ? { 
    condition1 : 
    condition2 : 
    ... 
} [item1, item2, ...] 

記得這將分配的值之一的陣列中FOO取決於代碼塊(或類似的東西)的內部。

有人可以幫我解決這個問題嗎?還是我完全想象這一點,並以某種方式相信它是真實的?

謝謝!

+0

[有條件/三元運算符](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator) –

+1

什麼是「代碼」?語句,對象字面量的一部分,還有其他的東西? – PeterMader

+0

它看起來像一個畸形的三元表達式。 'var a = b? true:false;':如果'b'真正將'a'設置爲true,否則將其設置爲'false'。 – Andy

回答

0

你可能會談論這句法

var foo = [item1, item2, item3...][index]; //general syntax 
var foo = ["a", "b", "c"][0]; //a 
var foo = ["a", "b", "c"][1]; //b 
var foo = ["a", "b", "c"][2]; //c 
+0

這是有條件的,謝謝 – user8455627

0

是的,這就是所謂的三元運算符,其作用如下。

condition ? iftrue : iffalse 

例如,這樣的:

fee = isMember ? '2.50' : '5.00'; 
alert('Your fee is $' + fee); 

等於這樣的:

if(isMember) { 
    fee = '2.50'; 
} else { 
    fee = '5.00'; 
} 
alert('Your fee is $' + fee); 


(編輯)也許你可以使用這樣的事情:

foo = ['item0', 'item1', 'item2', 'item3'][ 
    condition0 && 0 || 
    condition1 && 1 || 
    condition2 && 2 || 
    condition3 && 3] 
+0

在功能上這是,但我正在尋找一種超級濃縮的方式寫這一切 – user8455627

+0

我想說一行很濃縮...你的意思是你想使用一個函數而不是'isMember',並且基於該函數返回什麼? – Poootaatoooo

+0

一旦你開始嵌套條件,這可能會變得很難閱讀,我提到的語法列出了條件一行,然後之後,具有相同數量的價值的數組,其中之一取決於哪個條件返回true。 – user8455627

0

不,那當然不存在。你可以做這樣的事情:

foo = function (condition, array) { 
    if (condition === 'a') { 
    return array[0]; 
    } 
    if (condition === 'b') { 
    return array[1]; 
    } 
}(bar, [item1, item2, ...]); 

工作例如:

var foo = function (condition, array) { 
 
    if (condition === 'a') { 
 
    return array[0]; 
 
    } 
 
    if (condition === 'b') { 
 
    return array[1]; 
 
    } 
 
}('b', ['some', 'array', 'containing', 'words']); 
 

 
console.log(foo);

這會做你想要的,但似乎過於複雜。

+0

那裏肯定有一個數組,並且沒有** if ... else如果**或**函數**或**返回**,我也不記得打開和關閉這麼多curly括號內,每個案件一行。我測試過它,它工作,我很興奮,因爲這會縮短我的很多代碼。但現在我忘了如何寫它,嘆息... – user8455627