Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery每次迭代复杂的JSON结构时使用;where子句;_Javascript_Jquery_Json_Each - Fatal编程技术网

Javascript jquery每次迭代复杂的JSON结构时使用;where子句;

Javascript jquery每次迭代复杂的JSON结构时使用;where子句;,javascript,jquery,json,each,Javascript,Jquery,Json,Each,我不完全清楚如何构造$.each()函数 以下JSON数据块在数组ItemValues中包含多个项。我要寻找的是一种方法(因为这个数据包可以任意大),即获取每个ItemValue数组项,其中Fields.Id相当于某个值“x” 还有,是否有某种方法可以将ItemValues[n].Fields.units作为数组检索 JSON: 假设您的json显示在变量json中,那么对于这个确切的场景,您可以使用: function validItems(id,json){ var validItemVa

我不完全清楚如何构造
$.each()
函数

以下JSON数据块在数组
ItemValues
中包含多个项。我要寻找的是一种方法(因为这个数据包可以任意大),即获取每个
ItemValue
数组项,其中
Fields.Id
相当于某个值“x”

还有,是否有某种方法可以将
ItemValues[n].Fields.units
作为数组检索

JSON:
假设您的json显示在变量
json
中,那么对于这个确切的场景,您可以使用:

function validItems(id,json){
 var validItemValues = [];
 var values = json.ItemValues;
 for(var value in values){
  if( !values.hasOwnProperty(value) )continue;
  var itemValue = values[value];
  if( itemValue.Fields.id == id ){
   validItemValues.push(itemValue);
  }
 }
 return validItemValues;
}
使用jQuery的
执行相同的方法。每个

function validItems(id,json){
 var validItemValues = [];
 $.each(json.ItemValues,function(){
  if(this.Fields.id == id)validItemValues.push(this);
 });
 return validItemValues;
}
有关查找json值的递归方法,请参见以下答案:

一旦获得了有效项,就可以遍历它们,然后使用split将units字符串转换为数组

var validItemList = validItems(id,json);
for( var item in validItemList ){
 if( !validItemList .hasOwnProperty(item ) )continue;
 var currentItem = validItemList[item];
 var fieldsUnitArray = currentItem.Fields.units.split(" ");
 //work with array of units
}

下面是一段代码,它显示了所有内容(根据需要使用
$.each()
),使用和

,玩它


注意:当然还有一些更好的解决方案。

您可能想了解一下如何处理嵌套数据结构。然后您可以切换到
$。如果您愿意,每个
。@FelixKling谢谢Felix,我知道如何以这种方式遍历数据,我特别寻找$。每种方式都是因为我不想在结构上多次循环检查特定字段的等效性。
$。每种
都只是
循环中的
的替代品。它不做任何循环不能做的事情。例如,
$。每个(d,函数(k,v){}
与(var k=0;k
或(var k in d){var v=d[k];}相同。如果您知道如何在没有
$的情况下进行此操作。每个
$都知道如何使用
$进行此操作。每个
。使用linqjs它将赢得游戏@费利克斯克林:我不知道你在评论中说了什么,但我重新读了一遍,我的大脑中突然出现了一些东西,现在一切都清楚了。有时候,我想踢自己。如果我在第一次回复中显得忘恩负义,那就表示感谢和抱歉!
var validItemList = validItems(id,json);
for( var item in validItemList ){
 if( !validItemList .hasOwnProperty(item ) )continue;
 var currentItem = validItemList[item];
 var fieldsUnitArray = currentItem.Fields.units.split(" ");
 //work with array of units
}
var json_string = "Your JSON here";

//Use JSON.parse to make it an object
var json_object = JSON.parse(json_string.innerHTML);

//Will store the matched identifier
var matched_id;

//Will store the matched array
var matched_array;

//A valid test case, with units not null
var x = 13288263; 
$.each(json_object.ItemValues, function(key, item_value){
    if(item_value.Fields.id == x){
        matched_id = item_value.Fields.id;

        //Second part of the question
        var units = item_value.Fields.units;
        if(units != ""){
            //String.split() returns an array, by splitting the string with 
            //selected string
            matched_array = units.split(', ');
        }
    }
});