命名对象和它们的集合

时间:2015-11-23 09:12:13

标签: javascript arrays object

不确定如何问tbh:)

我已经习惯了PHP的关联数组,以至于我很难理解如何创建对象的“命名数组”。

实施例: 我有两个数组,两个整数和一个布尔值。这代表了我的一个实体。我有多个实体,我正在做一些工作。

在PHP中我会写:

$entitites[$entitity_id]['items'][] = $item;
$entitites[$entitity_id]['items_status'][] = $item_status;
$entitites[$entitity_id]['items_count']++;

依旧......

如何使用JS中的对象执行此操作?

var entities = {items:[], items_status: [], items_count: 0};

entities[entity_id].items.push(item)

如何命名他的对象以供以后访问(通过名称或在我的情况下,entity_id?)

此代码对我来说不起作用,我的网页变为空白而没有产生任何错误:S

我也试过这个:

var entities = {};
var entity = {items:[], items_status: [], items_count: 0};

但后来我不知道如何总是将值添加到实体对象中的现有对象以及如何通过名称调用该确切对象,例如。 ENTITY_ID。

Halp :(

2 个答案:

答案 0 :(得分:1)

将实体作为对象。然后你可以继续将每个entity_id添加为一个键和一个具有该实体的所有细节作为值的对象。

var entities = {};
entities["1234"] = {
    "items" : [],
    "items_status" : [],
    "items_count" : 0
};

答案 1 :(得分:0)

您可以使用常规javascript对象来创建您正在寻找的关联数组。

实际上它是PHP的实现,但是他们所做的只是将它称为不同的(关联数组)到大多数其他语言,只是将它称为对象或散列。

您可以在JS中使用数字键,但仍然可以使用[]方括号访问它们。

它的工作原理如下:

var my_obj = {};
my_obj[5] = 'any value';
console.log(my_obj); // {5: 'any value'}

JS不会向缺少的索引添加任何冗余undefined,因此当循环遍历集合时,您将不会循环遍历未定义。

此外,我可以使用键作为字符串或数字来访问对象,这样您就不必检查键是否是正确的类型。取自上面的例子:

console.log(my_obj['5']); // 'any value'
console.log(my_obj[5]); // 'any value'

JS对象是PHP关联数组的等价物,除了JS对象比PHP的关联数组更灵活。

唯一的缺点是你不能拥有重复的密钥。 如果你.push(an_item)它会创建一个新的索引,即使重复的数据条目是唯一的,但是当用一个新值覆盖一个键时,只有最后一个值会持续,所以在一个数组中可能不存在共享相同名称的两个键。请注意:)