我正在使用会话存储临时保存数据并尝试在会话数据中搜索字符串(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"}]
答案 0 :(得分:1)
数组搜索无法正常工作。
您的数组是一个对象数组。您正在尝试将字符串(在本例中为gridData.catalogNumber
)与这些对象进行匹配。
如果你的数组是一个字符串数组,那么你的搜索就行了。另一种方法可能是:
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));
}
更好的解决方案可能是将对象数组映射到字符串数组中。
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));
}