私は次のオブジェクトを持っています
{ join: {} }
以下の配列からデフォルトのオブジェクトを見つけたいのですが
[
{ login: { label: 'Login', url: '#login' } },
{ join: { label: 'Join', url: '#join', theme: 'a' } },
{ home: { label: 'none', icon: 'home', url: '#', theme: 'a' } }
]
配列をループしてキーを一致させたいのですが、この場合は'join'
。
これは私がこれまでに持っているものです:
var butt_to_find = { join: {} }
var all_buttons = 'array above'
var matching = _.find(all_buttons, function(default_button){
return if default_butt key @ 1 is the same as butt_to_find key @ 1;
});
アンダースコアについて多くのことを聞いた後、アンダースコアを使用したのはこれが初めてです。どんな助けでも、歓迎以上に
var buttons = [
{ login: { label: 'Login', url: '#login' } },
{ join: { label: 'Join', url: '#join', theme: 'a' } },
{ home: { label: 'none', icon: 'home', url: '#', theme: 'a' } }
]
_.find(buttons, function (button) { return 'join' in button })
問題は、次善のデータ構造を使用していることです。これはより理にかなっており、より単純なコードを生成します。
var buttons = {
login: {label: 'Login', url: '#login'},
join: {label: 'Join', url: '#join', theme: 'a'},
home: {label: 'none', icon: 'home', url: '#', theme: 'a'}
}
buttons.join // equivalent to the `_.find` line in the first example (but much simpler)
ボタンの順序が重要であるため、おそらく配列を使用しています。この場合、配列の配列を使用します。
var buttons = [
['login', {label: 'Login', url: '#login'}],
['join', {label: 'Join', url: '#join', theme: 'a'}],
['home', {label: 'none', icon: 'home', url: '#', theme: 'a'}]
]
_.find(buttons, function (button) { return button[0] === 'join' })
_var matching =
( _.find
( all_buttons,
function (button)
{ return _.keys(butt_to_find)[0] in button;
}
)
);
_
ここで、_.keys(butt_to_find)
は_['join']
_(_butt_to_find
_のキーを含む配列)と評価され、_.keys(butt_to_find)[0]
は_'join'
_(上記の配列の最初の要素)と評価されます。 )、および_.keys(butt_to_find)[0] in button
は、true
にキーとして_'join'
_が含まれているかどうかに応じて、false
またはbutton
のいずれかに評価されます。 ( in
演算子 は通常のJavaScript演算子であり、underscore.jsによって追加されたものではありません。)
var def = {join: {}}
var defs = [
{ login: { label: 'Login', url: '#login' } },
{ join: { label: 'Join', url: '#join', theme: 'a' } },
{ home: { label: 'none', icon: 'home', url: '#', theme: 'a' } }
]
_.find(defs,function(item,key){
return _.has(item,_.keys(def)[0])
})
Lodashライブラリ(アンダースコアのバージョンのドロップ)に切り替えて、これを行うこともできます
_.compact(_.pluck(defs,_.keys(def)[0]))