在数组中推送记录时取消定义

时间:2017-05-10 12:12:16

标签: javascript

我正在尝试将值推送到关联数组,但是当我推送它时会定义。

因此,当我将多个记录推送到我的arr变量时,如下所示:

var obj = { name: 'abc',value : 0};
var obj = { name: 'pqr',value : 1};
var obj = { name: 'lmn',value : 2};

并且假设我想获得abc的值,那么我可以像下面这样得到它:

var name = "abc";
arr[name];

演示:



var obj = { name: 'abc',value : 0};

var arr = [];

arr[obj.name].push({
                 key : obj.value
                });
                
                console.log(arr);




4 个答案:

答案 0 :(得分:1)

不要推送到数组,放入对象

var obj= {
 abc:0,
 pqr:1
};
alert(obj.abc);
obj["lnm"]=2;
alert(obj.lnm);

答案 1 :(得分:1)

试试这个。将arr更改为object而不是array。因为数组不是键值对。而arr[obj.name]=[]声明arr[obj.name] array.Then只将Object推到array



var obj = { name: 'abc',value : 0};
var arr = {};
arr[obj.name]=[];
arr[obj.name].push({
                 key : obj.value
                   });
 console.log(arr);




使用Array进行多个对象



var obj1 = { name: 'abc',value : 0};
var obj2 = { name: 'pqr',value : 1};
var obj3 = { name: 'lmn',value : 2};
 var arr=[];
function add(a){
var k ={}
k[a.name]=a.value;
arr.push(k)
}
add(obj1)
add(obj2)
add(obj3)

console.log(arr)




答案 2 :(得分:1)

你需要一个带数组的对象。



var records = {}; //holds the keys with their array of values
function insertRecord(obj) {
  records[obj.name] = records[obj.name] || []; //if we have not seen the key, set it up
  records[obj.name].push(obj.value); //add the new value
}

insertRecord({
  name: 'abc',
  value: 0
});
insertRecord({
  name: 'pqr',
  value: 1
});
insertRecord({
  name: 'lmn',
  value: 2
});
insertRecord({
  name: 'abc',
  value: 5
});

insertRecord({
  name: 'abc',
  value: 10
});

console.log(records["abc"])




答案 3 :(得分:1)

你在这里要做的是(如果我是对的!),要将对象的值添加到数组索引作为object.name 的数组中。

为此目的有一个函数array_push()。 比如,array_push($array[obj.name], obj.value);

或者您可以直接使用$data[$key] = $value;。 比如,arr[obj.name] = obj.value;

希望它有所帮助。