Javascript - 带有布尔键的数组?

Posted

技术标签:

【中文标题】Javascript - 带有布尔键的数组?【英文标题】:Javascript - Array with Boolean Keys? 【发布时间】:2013-01-07 18:35:36 【问题描述】:

我对 javascript 比较陌生,可能只是一个我不熟悉的技巧,但是如何将布尔值分配给数组键?

发生了什么:

var test = new Array();
test[false] = "asdf";
test['false'] = "fdsa";

Object.keys(test); // Yield [ "false" ]
Object.keys(test).length; // Yield 1

我想要发生的事情:

var test = new Array();

//Some stuff

Object.keys(test); // Yield [ "false" , false ]
Object.keys(test).length; // Yield 2

【问题讨论】:

【参考方案1】:

你也可以颠倒上面的答案,比如

let test = [true];

console.log(typeof test);

// Output: Object True

【讨论】:

【参考方案2】:

您不能在数组中使用任意索引,但您可以使用对象字面量来(某种程度上)完成您所追求的:

var test = ;
test[false] = "asdf";
test['false'] = "fdsa";

但是应该注意,对象属性必须是字符串(或可以转换为字符串的类型)。使用布尔原语最终会创建一个名为 'false' 的对象属性。

test[false] === test['false'] === test.false

这就是为什么您的第一个示例的 Object.keys().length 调用只返回 1

关于 JavaScript 对象的优秀入门指南,我推荐 MDN 的 Working with objects

【讨论】:

很高兴知道这一点。也许我只是太宠坏了去年主要从事 php 工作。我不认为我可以同时拥有一个带有数字键和“关联”键的数组对象,可以吗?基本上,我需要一个包含单级数组的数组,如果用户属于某个组,则在上数组中创建一个键来保存该组中用户信息的下数组,如果他们是不是组的一部分,他们需要默认为“空白”组。问题是该组可以命名为任何名称,所以我希望这个“空白”键不是字符串。 您可以将对象属性命名为整数 (var obj = ; obj[1] = 'foo' )。通常你会使用一个对象,然后创建一个 that 对象的属性,它是一个数组:var obj = ; obj.ArrayProp = [];。希望对您有所帮助... 谢谢。像你这样的人是我喜欢这个网站的原因。【参考方案3】:

Javascript 中的数组不具有关联性,因此您无法为其中的键赋值。

var test = [];
test.push(true);  // [true]
test.push(false); // [true, false]

您对某个对象感兴趣!

var test    = ;
test[true]  = "Success!";
test[false] = "Sadness";  // 'false': "Sadness", 'true': "Success"

【讨论】:

【参考方案4】:

Javascript 数组仅基于数字索引。您可以使用 0 和 1 作为键(尽管我想不出需要布尔键的情况)。 myArr[0] = "mapped from false"; myArr[1] = "mapped from true";

【讨论】:

以上是关于Javascript - 带有布尔键的数组?的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript:将具有父键的对象数组转换为父/子树(包括没有父的对象)

如何在javascript中完全获取带有重复键的JSON

两个带有json键的数组[重复]

带有键的数组的 Twig for 循环

包含带有数字键的数组失败

将数组内容正确存储到带有键的字典中