将字符串添加到 JavaScript 数组

Adding strings to javascript array

本文关键字:JavaScript 数组 添加 字符串      更新时间:2023-09-26

>我有以下代码

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")并执行console.log(array)后,数组日志为空,我不明白为什么......有人可以帮助我吗?泰姆

编辑

等等,伙

计们,毕竟我有数组={}正确。错误仍在 :'x 上

第3章 迷雾加深

伙计们,使用上面的代码,我让它仅在数组之前不为空时才工作,因此如果数组{ some_key: Array[1] },它实际上可以工作.有什么想法吗?xD"GROUP"与"some_key"不同,因此该组是"新的"

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

var array = [];
array[0] = 'something';

在您的情况下,您需要一个对象

var obj = {};
obj['name'] = 'dave';

请注意,您的代码现在将给出 NaN 的长度,因为对象没有长度属性(因此 array.length 不起作用,当您尝试递增/递减它时会给你 NaN)

您需要做Object.keys(obj).length才能获得长度

Object.keys({name:'bob'}).length将给出 1 的长度

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

var data = {};
function add(group, value) {
    data[group] = data[group] || [];
    data[group].push(value);
}

代码失败的原因

真的,这条线给你带来了问题:

    if(index != 0)
        index = array.length--;

在 上使用递减运算符 array.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;
    }
};

然后使用它:

// 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;

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

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