2016-12-07 76 views
1
var formRenderData = [{ 
    "type": "checkbox-group", 
    "label": "Checkbox Group", 
    "className": "checkbox-group", 
    "name": "checkbox-group-1479370460494", 
    "values": [{ 
    "label": "Option 1", 
    "value": "option-1", 
    "selected": true 
    }, { 
    "label": "Option 2", 
    "value": "option-2" 
    }, { 
    "label": "Option 3", 
    "value": "option-3" 
    }] 
}, { 
    "type": "paragraph", 
    "subtype": "p", 
    "label": "Paragraph", 
    "className": "paragraph" 
}]; 

我正在使用grep來匹配對象。如何從json對象獲取匹配元素的索引?

var InputName = 'checkbox-group-1479370460494'; 
var InputType = 'checkbox-group'; 

var returnedIndex = $.grep(formRenderData, function(element, index){ 
    if(((element.name == InputName) || (element.label == InputName)|| (element.name == InputName.substr(0,InputName.length - 2))) && element.type == InputType){ 
     return index; 
    } 
}); 

console.log(returnedIndex); 
+1

循環使用一些其他形式的,而不是'$ .grep()'? '$ .grep()'函數返回一個匹配項的數組。您可以使用'.map()'返回匹配的項目(s)並添加'index'屬性。順便說一句,在你的問題中沒有JSON,[沒有像「JSON對象」這樣的東西](http://benalman.com/news/2010/03/theres-no-such-thing-as-a- JSON /)。 – nnnnnn

+0

我可以使用$ .map(formRenderData,function(element,index){ //做點什麼 }); –

回答

2

jQuery.grep濾光器陣列,返回而保留原始數組不變的是滿足了過濾功能的項目清單。 (請參閱。)

我不確定爲什麼要訪問索引;我假設你想訪問滿足過濾器的原始對象。這可以通過從你的過濾器函數返回true,然後循環遍歷匹配數組來實現。

var InputName = 'checkbox-group-1479370460494'; 
 
var InputType = 'checkbox-group'; 
 
var formRenderData = [{"type": "checkbox-group","label": "Checkbox Group","className": "checkbox-group","name": "checkbox-group-1479370460494","values": [{"label": "Option 1","value": "option-1","selected": true},{"label": "Option 2","value": "option-2"},{"label": "Option 3","value": "option-3"}]},{"type": "paragraph","subtype": "p","label": "Paragraph","className": "paragraph"}] 
 

 
var matches = $.grep(formRenderData, function(element, index){ 
 
    if(((element.name == InputName) || (element.label == InputName)|| (element.name == InputName.substr(0,InputName.length - 2))) && element.type == InputType){ 
 
     return true 
 
    } 
 
}); 
 

 
console.log(matches); // [Array]
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>