JSON文件受到一系列密钥和值的影响。我知道给定JSON中的潜在密钥,但不知道它们是否具有相应的非空值。我已将JSON文件加载到名为JSON的对象中。我想找到带有值的几个可能键中的第一个,然后将该值赋给变量。当我说“第一个”时,我的意思是“第一个”,根据与JSON结构无关的优先级列表:
我可以做以下工作:
if(json.age)
myValue = json.age;
else if(json.classYear)
myValue = json.classYear;
else if(json.seniority)
myValue = json.seniority
else
myValue = false;
这很有效但有几个原因:
这些原因让我相信上面列出的方法并不理想。还有其他一些模式会更好吗?
(注意:我认识到这个问题与“如何做到最好”相对,而不是“如何”措辞。我知道这个问题并不是很疯狂,我并不是说我的问题需要解释相反,我的问题应该被解释为问:“是否有一些特别适合上述问题的设计模式?”
(注意:我只接受一个香草答案,但如果你认为他们会有所帮助,请随时提供其他答案。)
答案 0 :(得分:4)
您可以使用short-circuit evaluation。你仍然需要写出所有的属性名称,但我不确定有没有办法完成这项任务而不这样做。
const myValue = json.age || json.classYear || json.senority || false;
答案 1 :(得分:2)
好的,所以如果你有一维哈希表和一个关键优先级的数组,那么你可以使用这样的算法来选择第一个可用的算法:
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] != null
来修改未定义/ null。
答案 2 :(得分:0)
如果您使用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
,并且一旦找到有效值,也会退出循环。