避免对象属性值无用的反模式?

问题描述 投票:0回答:1

在字符串变量和多个值之间进行比较的情况下,检查字符串是否与容器类型中的任何元素匹配优于执行如下顺序比较:

if (value === "a" || value === "b" || value === "c" ...)

在Python中,如果我想测试一个变量是否等于

"a"
"b"
"c"
等,我会使用
in
运算符和
List
:

L = ["a", "b", "c"]
value = "b"
value in L  # This evaluates to True

在 JavaScript 中,这不起作用,因为在数组上使用

in
会查看数组的索引而不是其元素的值。所以,

var A = ["a", "b", "c"];
var value = "b";
value in A  // This evaluates to false

解决这个问题的两种方法是使用具有命名属性的对象而不是数组,或者循环数组并与每个元素进行比较:

var obj = {"a": null, "b": null, "c": null};
value in obj // This evaluates to true

OR

for (var i = 0; i < A.length; i++) {
    if (value === A[i]) {
        // Will be true at i == 1
    }
}

我更喜欢第一种方法,因为它更紧凑并且可能更快(可能是 O(1) 而不是 O(n)):https://stackoverflow.com/a/55078588/18248018

但是,似乎使用对象仍然不是最好的解决方案,因为属性的值从未被使用并且是多余的。

是否有更适合进行这种多值比较的标准或首选方法?

javascript arrays object comparison
1个回答
1
投票

可以使用数组方法

includes
:

const A = ["a", "b", "c"];
let value = "b";
console.log(A.includes(value));
value = "d";
console.log(A.includes(value));

© www.soinside.com 2019 - 2024. All rights reserved.