gpt4 book ai didi

javascript - 对象 javascript 的条件

转载 作者:太空宇宙 更新时间:2023-11-03 22:34:57 25 4
gpt4 key购买 nike

我想询问 JS 中对象条件的最佳实践。

fexp:

if (a.b.c.d == 1)

但是如果我不知道该对象是否具有正确的结构,我需要像这样进行条件操作:

if(a && a.b && a.b.c && a.b.c.d && a.b.c.d == 1)

这是检查值的最佳方法吗?只 try catch ?通用方法如下:

javascript test for existence of nested object key

不是最好的方法,因为我需要更改条件的定义。我不能在这个示例中使用这样的规则: if (a.b[1].c.d)

我需要记住所有路径、字符串更改等...

我正在寻找我的第一个条件的良好解决方案: if (a.b.c.d ==1 )

不改变它或以简单的方式改变它 if (is(a.b.c.d) == 1)

try catch 可以,但对于大量条件语句不行:(

最佳答案

您可以只检查每个值并继续检查,直到耗尽深度。我在下面编写了一个小辅助函数,可以自动执行此过程:

function checkDeep(object){
for(var i = 1; i < arguments.length; i++){
if(typeof object[arguments[i]] !== "undefined"){
/* Check the type of the nested value - if not undefined,
* set it to `object` and continue looping. */
object = object[arguments[i]]
} else {
/* If it is not undefined, return false. */
return false;
}
}
/* If we made it past the loop, all the values exist and we return true. */
return true;
}

您可以在末尾添加任意数量的变量,并查看它们是否嵌套在前一个值中。如果它在链中的任何地方遇到中断,它将返回 false。所以它的定义是:

checkDeep(object, var1[, var2, var3, ...]);

它会被这样称呼:

checkDeep({a:{b:{c:['d']}}}, 'a', 'b', 'c'); // true
checkDeep({a:{b:{c:['d']}}}, 'a', 'c', 'c'); // false

如果您想要该位置的值,只需在函数末尾返回对象,而不是返回 true

function checkDeep(object){
for(var i = 1; i < arguments.length; i++){
if(typeof object[arguments[i]] != 'undefined') object = object[arguments[i]]
else return false;
}
return true;
}

var object = {a:{b:{c:['d']}}};

document.write("Order a,c,c in '{a:{b:{c:['d']}}}' is " + (checkDeep(object, 'a', 'c', 'c') ? "true" : "false") + "<br />");
checkDeep(object, 'a', 'c', 'c'); // false

document.write("Order a,b,c in '{a:{b:{c:['d']}}}' is " + (checkDeep(object, 'a', 'b', 'c') ? "true" : "false") + "<br />");
checkDeep(object, 'a', 'b', 'c'); // true

关于javascript - 对象 javascript 的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30804317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com