如何使用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与PHPforeach
不同o
是键,而不是元素。@Barmar-在Python模式下有一段时间。非常感谢您-解决方案2在大多数情况下都很有效。我确实有点打嗝。清除缓存和会话数据时,sessionStorageData键“people”的值为“[null]”,这会导致以下错误:无法读取nullok更新答案的属性“catalogNumber”。添加了一个过滤器
以删除所有“空/未定义”数组元素。