2016-12-07 77 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>