Javascript 如何选择JSON中存在的几个项目中的第一个?
JSON文件是由一系列密钥和值组成的。我知道给定JSON中的潜在键,但不知道它们是否具有相应的非空值。我已经将JSON文件加载到一个名为JSON的对象中。我想找到具有值的几个可能键中的第一个,然后将该值分配给变量。当我说“first”时,我指的是根据与JSON结构无关的优先级列表的“first”: 我可以做到以下几点,而且效果很好:Javascript 如何选择JSON中存在的几个项目中的第一个?,javascript,json,Javascript,Json,JSON文件是由一系列密钥和值组成的。我知道给定JSON中的潜在键,但不知道它们是否具有相应的非空值。我已经将JSON文件加载到一个名为JSON的对象中。我想找到具有值的几个可能键中的第一个,然后将该值分配给变量。当我说“first”时,我指的是根据与JSON结构无关的优先级列表的“first”: 我可以做到以下几点,而且效果很好: if(json.age) myValue = json.age; else if(json.classYear) myValue = json.cl
if(json.age)
myValue = json.age;
else if(json.classYear)
myValue = json.classYear;
else if(json.seniority)
myValue = json.seniority
else
myValue = false;
这是可行的,但有几个原因很糟糕:
const myValue = json.age || json.classYear || json.senority || false;
你可以用。您仍然需要写出所有的属性名称,但我不确定是否有办法不这样做就完成此任务
const myValue = json.age || json.classYear || json.senority || false;
如果您可以使用一点
JQuery
,那么我想下面的代码片段应该可以完成这项工作
$.each(JSONObj, function(key, value){
if (!(value === "" || value === null)){
myValue = value;
return false; //to break the loop once a valid value is found
}
});
这将为变量
myValue
分配第一个有效值,并在找到有效值后退出循环。如果您对使用一点JQuery
没问题,那么我想下面的代码片段应该可以完成这项工作
$.each(JSONObj, function(key, value){
if (!(value === "" || value === null)){
myValue = value;
return false; //to break the loop once a valid value is found
}
});
这将为变量
myValue
分配第一个有效值,并在找到有效值后退出循环。好的,因此如果您有一个一维哈希表和一个键优先级数组,那么您可以使用类似这样的算法来选择第一个可用值:
function grab(hash, keyPriority) {
var value;
keyPriority.some(function (key) {
if (hash.hasOwnProperty(key)) { // check if the property exists
value = hash[key];
return true; // break out of loop
}
});
return value;
}
用法:
grab({ c: 3, d: 4 }, ['a', 'b', 'c', 'd']) // 3
您可以通过truthy值来修改它,或者通过将
hash.hasOwnProperty(key)
更改为hash[key]
或hash[key]!=空值。好的,如果您有一个一维哈希表和一个键优先级数组,那么您可以使用如下算法选择第一个可用的:
function grab(hash, keyPriority) {
var value;
keyPriority.some(function (key) {
if (hash.hasOwnProperty(key)) { // check if the property exists
value = hash[key];
return true; // break out of loop
}
});
return value;
}
用法:
grab({ c: 3, d: 4 }, ['a', 'b', 'c', 'd']) // 3
您可以通过truthy值来修改它,或者通过将hash.hasOwnProperty(key)
更改为hash[key]
或hash[key]!=分别为空。并且我将修复您的财产名称的拼写。“资历”!=“女士:)这正是我这么做的原因。非常感谢。请注意,如果任何属性的值可以合法地为0
或空字符串(或其他错误值),那么这将不会给出正确的结果。感谢您提供有助于了解nnnnn的注释,为什么这需要是常量?为什么您不能只使用变量执行此操作?我将修复属性名称的拼写。“资历”!=“女士:)这正是我这么做的原因。非常感谢。请注意,如果任何属性的值可以合法地为0
或空字符串(或其他错误值),则这将不会给出正确的结果。感谢您提供有助于了解nnnnn的说明。为什么这需要是一个常量?为什么不能仅使用变量执行此操作?这行不通,因为它没有按照所需的特定顺序测试属性(正如OP所说,这不一定与原始JSON结构的顺序相关(对象属性也没有像数组元素那样的固有顺序))。这不起作用,因为它没有按照所需的特定顺序测试属性(正如OP所说,这不一定与原始JSON结构的顺序有关(对象属性也不像数组元素那样具有固有的顺序)。