当我获得ajax数据时,它是一个数组:
[
{"ID" :"1",
"Last":"SMITH",
},
{"ID" :"2",
"Last":"DOE",
},
]
我正在尝试将其保存到另一个数组变量中,以便可以添加更多的ajax数据以供将来使用:
var arr = [];
arr.push(ajax_data);
但是,ajax数组被添加到另一个数组中:
[
[
{"ID" :"1",
"Last":"SMITH",
},
{"ID" :"2",
"Last":"DOE",
},
]
]
所以这是我的问题:
答案 0 :(得分:2)
如果使用ID
作为键将数据保存在对象中,则可以解决这两个问题。将变量初始化为空对象:
var saved_data = {};
然后在你的AJAX回调函数中添加新对象:
ajax_data.forEach(function(object) {
saved_data[object.ID] = object;
});
现在您可以使用saved_data["1"].Last
来访问特定对象。
答案 1 :(得分:1)
你们有什么建议,以便只有一个阵列添加多个ajax阵列?换句话说,我如何删除extra []语法?
您需要使用concat()
代替push()
:
concat
创建一个新数组,该数组由调用它的对象中的元素组成,依次为每个参数,该参数的元素(如果参数是数组)或参数本身(如果参数不是数组)。
var array1 = [
{"ID" :"1",
"Last":"SMITH",
},
{"ID" :"2",
"Last":"DOE",
},
];
var newArray = array1.concat(array2);
每个对象都有多个键。我想使用“ID”作为主键来查找要使用的对象。如何搜索并选择正确的对象?
如果您想根据ID
检索:
var found;
var ID = "2";
newArray.some(function (obj) {
if (obj.ID === ID) {
found = obj;
return true;
}
});
found
将是:Object {ID: "4", Last: "DOE"}
答案 2 :(得分:1)
你们有什么建议,这样只有一个阵列有多个 ajax数组加?换句话说,我如何删除extra []语法?
您需要使用向数组添加多个元素的方法之一,而不是添加数组本身(请参阅下面的选项)。
要添加到现有阵列,您可以使用.push()
或.splice()
。您也可以使用.concat()
,但它返回一个新数组,您必须将其分配回前一个变量:
var arr = [];
var newData = [
{"ID" :"1",
"Last":"SMITH",
},
{"ID" :"2",
"Last":"DOE",
},
];
// add newData onto arr using .push()
arr.push.apply(arr, newData);
// add newData onto arr using .concat()
// remember that .concat() returns a new array
arr = arr.concat(newData);
使用.splice()
需要更多参与,如果您尝试替换元素,则可能只会这样做。
// put first two `.splice()` arguments onto front of the array
newData.unshift(arr.length, 0);
arr.splice.apply(arr, newData);
每个对象都有多个键。我想用“ID”作为主要的 找到要使用的对象的关键。我如何搜索并选择 正确的对象?
如果您希望能够按ID索引,那么数组不是一个非常有效的结构。您必须搜索数组中的每个对象以查找具有匹配ID的对象。您可以按ID创建单独的索引,也可以更改存储数据的方式。如何更改存储数据的方式取决于您需要如何访问数据,是否存在具有相同键的多个对象,对象是否具有多个键等等...您必须指定更多详细信息关于你需要我们提出一个好的建议。
只需100个条目,您就可以轻松进行暴力搜索:
function findById(array, id) {
for (var i = 0; i < array.length; i++) {
if (array[i].ID === id) {
return array[i];
}
}
return null;
}
如果你想索引它们并且所有ID都是唯一的并且顺序不相关,那么只需存储在一个对象中而不是数组:
var data = {};
// add new data to our storage
newData.forEach(function(item) {
data[item.ID] = item;
});
然后,按ID访问:
var item = data[id];
在ES6中(或通过转换或使用polyfill),您还可以使用Map
对象。
var data = new Map();
// add new data to our storage
newData.forEach(function(item) {
data.set(item.ID, item);
});
然后,按ID访问:
var item = data.get(id);
Map
对象优于使用常规JS对象的一个优点是您的id可以是任何数据类型(包括另一个对象)。使用普通的JS对象时,必须将其强制转换为唯一的字符串。