Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.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
如何使用jQuery搜索JSON?_Jquery_Arrays_Json - Fatal编程技术网

如何使用jQuery搜索JSON?

如何使用jQuery搜索JSON?,jquery,arrays,json,Jquery,Arrays,Json,我正在使用会话存储临时保存数据,并尝试在会话数据中搜索字符串(CatalogNumber)。如果字符串不存在,我想添加它 这是我到目前为止尝试过的,但它仍然允许复制。由于某些原因,搜索无法用于阵列: var gridData = { catalogNumber: dataItem.CatalogNumber, fullName: dataItem.FullName, position: dataItem.CurrentTitle }; sessionStorageDat

我正在使用会话存储临时保存数据,并尝试在会话数据中搜索字符串(
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"}]

数组搜索不起作用是有道理的

您的数组是一个对象数组。您正在尝试将字符串(在本例中为
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));
}

您可能对我的JSON.search API感兴趣,它比$.grep快5倍,允许您使用regex进行搜索。查看什么是
def
?你的意思是
函数
?in的Javascript
与PHP
foreach
不同
o
是键,而不是元素。@Barmar-在Python模式下有一段时间。非常感谢您-解决方案2在大多数情况下都很有效。我确实有点打嗝。清除缓存和会话数据时,sessionStorageData键“people”的值为“[null]”,这会导致以下错误:无法读取nullok更新答案的属性“catalogNumber”。添加了一个
过滤器
以删除所有“空/未定义”数组元素。