2015-04-22 2 views
1

Здравствуйте, я хочу фильтровать данные json, такие как sql-запрос, без помощи плагинов, таких как alasql.js или linq.js или любые плагины. , напримерJson Фильтрация в jQuery

{ 
    "Managing PCL": [ 
     { 
      "idItScreen": "1436", 
      "topicName": "Managing PCL", 
      "isFav": 0, 
      "cdeItScreen": "ListActiveTarif", 
      "busScreenName": "My Current Tarif" 
     }, 
     { 
      "idItScreen": "1437", 
      "topicName": "Managing PCL", 
      "isFav": 0, 
      "cdeItScreen": "ListTermineTarif", 
      "busScreenName": "History Tarif" 
     } 
    ] 
} 

, например, мне нужно получить данные, где idItScreen> 1430, так что данные JSON должны отображаться основной задачей является сделать без плагинов поэтому, пожалуйста, рекомендую мне хорошее решение, чтобы сделать это без плагинов

+0

http://api.jquery.com/jquery.grep/ <--- это может помочь – dvIta

ответ

1

Сначала превратить ваш JSON в объект Javascript:

var obj = JSON.parse(myJSON); 

Затем сделайте вашу фильтрацию:

var matches = []; 
var arr = obj['Managing PCL']; 
for (var i = 0; i < arr.length; i++) { 
    if (arr[i].idItScreen > 1430) { 
     matches.push(arr[i]); 
    } 
} 

Или с помощью jQuery.grep:

var matches = jQuery.grep(obj['Managing PCL'], function(n, i) { 
    return n.idItScreen > 1430; 
}); 

matches Теперь содержит элементы соответствия.

Если вы хотите получить JSON снова, просто используйте JSON.stringify:

var filteredJSON = JSON.stringify({'Managing PCL': matches}); 
0

Вы также можете просто использовать .filter:

var matches = []; 
var all = obj['Managing PCL']; 
var filtered = all.filter(function(){ 
    return $(this).idItScreen > 1430; 
}) 
0

Вам не нужно JQuery для этого. Вместо этого используйте filter.

function filterData(data, key, value) { 
    return data.filter(function (el) { 
     return el[key] > value; 
    }); 
} 

// Note, `filter` operates on arrays, so you need to specify the 
// array that contains the data 
var result = filterData(data['Managing PCL'], 'idItScreen', '1430'); 

отметить также, что filter возвращает новый массив, содержащий объекты, которые он обнаружил, что соответствующие вашим критериям. Вы можете получить доступ к этим объектам обычным способом: например, result[0].

DEMO

Вы могли бы даже расширить это, чтобы создать функцию, которая возвращает данные, основанные на операторе тоже, а не только больше, чем, с помощью просмотрового объекта:

var lookup = { 
    '>': function (data, value) { return data > value; }, 
    '<': function (data, value) { return data < value; }, 
    '===': function (data, value) { return data === value; } 
} 

function filterData(data, key, operator, value) { 
    return data.filter(function (el) { 
     return lookup[operator](el[key], value); 
    }); 
} 

filterData(data['Managing PCL'], 'idItScreen', '>', '1430'); 
filterData(data['Managing PCL'], 'idItScreen', '===', '1430'); 

DEMO

0

Для этого вам не нужно использовать jQuery. Вы можете использовать метод filter()Array.prototype. См рабочий фрагмент кода ниже:

var obj = { 
 
    "Managing PCL": [{ 
 
    "idItScreen": "1436", 
 
    "topicName": "Managing PCL", 
 
    "isFav": 0, 
 
    "cdeItScreen": "ListActiveTarif", 
 
    "busScreenName": "My Current Tarif" 
 
    }, { 
 
    "idItScreen": "1437", 
 
    "topicName": "Managing PCL", 
 
    "isFav": 0, 
 
    "cdeItScreen": "ListTermineTarif", 
 
    "busScreenName": "History Tarif" 
 
    }] 
 
}; 
 

 
var filteredArray = obj['Managing PCL'].filter(function(item) { 
 
    return item.idItScreen > 1430; 
 
}); 
 

 
obj['Managing PCL'] = filteredArray; 
 
document.getElementById('result').innerHTML = JSON.stringify(obj);
<div id="result"></div>

Смежные вопросы