向javascript数组添加字符串

向javascript数组添加字符串,javascript,Javascript,我有以下代码 array = {}; function add(group,to_add){ var index,to_append = ""; if(array[group] === null || array[group] === undefined){ array[group] = [to_add]; index = array.length; if(index != 0) index = arr

我有以下代码

array = {};

function add(group,to_add){

    var index,to_append = "";

    if(array[group] === null || array[group] === undefined){
        array[group] = [to_add];
        index = array.length;
        if(index != 0)
            index = array.length--;
    }else{
        array[group].push(to_add);
        index = array.indexOf(group)--;
    }

}
add(“some_group”,“something”)
和doing
console.log(array)
之后,数组日志为空,我不明白为什么。。。有人能帮我吗?Tyvm

编辑 等等,伙计们,毕竟我的数组={}是正确的。错误仍然存在:'x

第三章:迷雾加深
伙计们,使用上面的代码,只有当数组以前不是空的时候,我才让它工作,所以如果数组是
{some_key:array[1]}
,它实际上工作。你知道为什么吗?xD'GROUP'与'some_key'不同,因此该组是“新的”

数组是数字索引的,不能这样访问

var array = [];
array[0] = 'something';
在您的情况下,您需要一个对象

var obj = {};
obj['name'] = 'dave';
但是请注意,您的代码现在将为length指定NaN,因为对象没有length属性(因此array.length不起作用,当您尝试递增/递减它时,将为您指定NaN)

您需要执行
Object.keys(obj.length)
以获取长度


i、 e
Object.keys({name:'bob'}).length
的长度为1

您是想写这样的东西吗?它创建一个对象。如果键不存在,则会添加一个数组作为值。然后将第二个参数添加到数组中

var obj = {};

function add(group, to_add) {
  if (!obj[group]) obj[group] = [];
  obj[group].push(to_add);
}

add("some_group","something");

基于@Andy的答案,可以进一步归结为:

var data = {};

function add(group, value) {
    data[group] = data[group] || [];
    data[group].push(value);
}
为什么你的代码会失败 实际上,这一行给您带来了问题:

    if(index != 0)
        index = array.length--;
数组.length上使用减量运算符会导致数组删除刚才按下的最后一个值。这也是为什么只有当数组为空时,您的代码才会失败,因为如果数组已经存在,您不会减少
array.index

将其封装在类中 为什么不让它成为一个对象单例,或者更好的是成为一个类

function DataStore(data) {
    this.data = data || {};
}

DataStore.prototype = {

    constructor: DataStore,

    add: function(group, value) {
        this.data[group] =  this.data[group] || [];

        return this.data[group].push(value) - 1;
    },

    contains: function(group, value) {
        if (!this.containsGroup(group)) {
            return false;
        }

        return this.data[group].indexOf(value) > -1;
    },

    containsGroup: function(group) {
        return this.data.hasOwnProperty(group);
    },

    forEach: function(callback, context) {
        context = context || this;

        var key, index, value, length;

        for (key in this.data) {
            if (this.data.hasOwnProperty(key)) {
                for (index = 0, length = this.data[key].length; i < length; i++) {
                    value = this.data[key][index];

                    if (callback.call(context, value, index, key) === false) {
                        return;
                    }
                }
            }
        }
    },

    get: function(group, index) {
        if (!this.containsGroup(group)) {
            return null;
        }
        else if (index == null) {
            return this.data[group];
        }
        else if (index >= 0 && index < this.data[group].length) {
            return this.data[group][index];
        }
        else {
            return null;
        }
    },

    remove: function(group, value) {
        if (!this.containsGroup(group)) {
            return -1;
        }

        var index = this.data[group].indexOf(value);

        this.data[group].splice(index, 1);

        return index;
    }

};

看起来您需要重新了解数组和对象之间的区别。使用数组作为关联是不可能的,请尝试使用JSON对象{}。@AndreCalenta您能否提供一个示例,说明当您使用
控制台时,
数组
会是什么样子。log
它?很清楚,
{}
不是一个“JSON对象”.索引
意味着要做什么?哈哈,这太糟糕了,我被语言搞混了。谢谢大家(我现在不能接受你的答案,我以后再做)别担心,如果我们经常切换语言,这会发生在我们所有人身上。在我在声明中完全正确之后,请看编辑:X这不是OP想要做的。他们希望在这个结构中有一个对象:
{“group_name”:[“a”,“b”]}
@atmd请看问题,确实如此,但如果由于以下代码可能会更改对象的相同键属性,那么它不能是短的。我的代码到底出了什么问题?@AndreCalenta,除了我的回答之外,我恐怕不知道你的代码是用来做什么的,或者当前的问题是什么。抱歉。我很难弄清楚索引在OP的代码中到底在做什么。@GregBurghardt看不到问题please@AndreCalenta:代码不起作用的原因是您正在递减数组.index值。这将有效地从阵列中删除最后一个推送项。
// An empty DataStore:
var data = new DataStore();

data.add("group", "value");
data.containsGroup("group"); // returns true
data.contains("group", "value"); // returns true;

data.forEach(function(value, index, group) {
    console.log(group + "[" + index + "] = " + value);
}); 

// Seed the data store with values:
var data2 = new DataStore({
    foo: ["bar", "baz"]
});

data2.contains("foo", "baz"); // returns true;