如何使用jQuery搜索JSON?

时间:2015-05-05 05:19:34

标签: jquery arrays json

我正在使用会话存储临时保存数据并尝试在会话数据中搜索字符串(CatalogNumber)。如果字符串不存在,我想添加它。

这是我到目前为止所尝试过的,但它仍然允许重复。由于某种原因,搜索不适用于阵列:

var gridData = {
    catalogNumber: dataItem.CatalogNumber,
    fullName: dataItem.FullName,
    position: dataItem.CurrentTitle
};

sessionStorageData = JSON.parse(sessionStorage.getItem('people'));

if (jQuery.inArray(gridData.catalogNumber, sessionStorageData ) === -1) {
    sessionStorageData.push(gridData);
    sessionStorage.setItem('people', JSON.stringify(sessionStorageData));
}

数据

[{"catalogNumber":"51263bf7-83c4-e411-825d-28b2bd14ba94","fullName":"John Doe","position":"Receptionist"}]

1 个答案:

答案 0 :(得分:1)

数组搜索无法正常工作。

您的数组是一个对象数组。您正在尝试将字符串(在本例中为gridData.catalogNumber)与这些对象进行匹配。

解决方案#1:

如果你的数组是一个字符串数组,那么你的搜索就行了。另一种方法可能是:

function found(gridData, sessionStorageData) {
  for (o in sessionStorageData) {
    if (sessionStorageData[o].catalogNumber == gridData.catalogNumber) {
      return true;
    }
  }
  return false;
}

if (!found(gridData.catalogNumber, sessionStorageData )) {
    sessionStorageData.push(gridData);
    sessionStorage.setItem('people', JSON.stringify(sessionStorageData));
}

解决方案#2

更好的解决方案可能是将对象数组映射到字符串数组中。

var catalogNumbers = sessionStorageData.filter(function(obj){ return !!obj }).map(function(obj) { return obj.catalogNumber; } );
if (jQuery.inArray(gridData.catalogNumber, catalogNumbers ) === -1) {
    sessionStorageData.push(gridData);
    sessionStorage.setItem('people', JSON.stringify(sessionStorageData));
}