Jquery JS对象和数组的选择与操作

Jquery JS对象和数组的选择与操作,jquery,arrays,ajax,Jquery,Arrays,Ajax,当我获取ajax数据时,它是一个数组: [ {"ID" :"1", "Last":"SMITH", }, {"ID" :"2", "Last":"DOE", }, ] 我试图将其保存到另一个数组变量中,以便添加更多ajax数据供将来使用: var arr = []; arr.push(ajax_data); 但是,ajax阵列被添加到另一个阵列中: [ [ {"ID" :"1", "Last":"SMITH", }, {"ID" :"

当我获取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",
  },
 ]
] 
下面是我的问题:

你们有什么建议,只有一个阵列可以添加多个ajax阵列?换句话说,我如何删除额外的[]语法? 每个对象将有多个关键点。我想使用ID作为主键来查找要使用的对象。如何搜索和选择正确的对象? 对于索引:

下面是我将要使用的一个通用数组结构,它将ID和post_ID作为两个键,但可以复制并粘贴其他键的值以用于此演示。对象的数量最多可达100个

这是ajax数据,将被压缩到一个数组中

正如@jfriend00所指出的,通过ID对其进行索引可能效率低下。按ID索引大型数组的好方法是什么

你们有什么建议,只有一个阵列可以添加多个ajax阵列?换句话说,我如何删除额外的[]语法

您将希望使用concat而不是push:

concat创建一个新数组,该数组由调用它的对象中的元素组成,对于每个参数,如果参数是数组,则后跟该参数的元素;如果参数不是数组,则后跟参数本身

var array1 = [
  {"ID"  :"1",
   "Last":"SMITH",
  },
  {"ID"  :"2",
   "Last":"DOE",
  },
];

var newArray = array1.concat(array2);
每个对象将有多个关键点。我想使用ID作为主键来查找要使用的对象。如何搜索和选择正确的对象

如果要基于ID检索,请执行以下操作:

找到的将是:对象{ID:4,Last:DOE}

你们有什么建议,只有一个阵列可以添加多个ajax阵列?换句话说,我如何删除额外的[]语法

您将希望使用concat而不是push:

concat创建一个新数组,该数组由调用它的对象中的元素组成,对于每个参数,如果参数是数组,则后跟该参数的元素;如果参数不是数组,则后跟参数本身

var array1 = [
  {"ID"  :"1",
   "Last":"SMITH",
  },
  {"ID"  :"2",
   "Last":"DOE",
  },
];

var newArray = array1.concat(array2);
每个对象将有多个关键点。我想使用ID作为主键来查找要使用的对象。如何搜索和选择正确的对象

如果要基于ID检索,请执行以下操作:

找到的将是:对象{ID:4,Last:DOE}

你们有什么建议,只有一个数组有多个 ajax阵列添加?换句话说,我如何删除额外的[]语法

您需要使用向数组中添加多个元素的方法之一,而不是添加数组本身。请参见下面的选项

要添加到现有阵列,可以使用.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的对象。您可以按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 item = data[id];
 var item = data.get(id);
在ES6中,或通过transpiling或使用多边形填充,也可以使用贴图对象

然后,要通过ID访问:

 var item = data[id];
 var item = data.get(id);
与使用常规JS对象相比,Map对象的一个优点是,您的id可以是任何数据类型,包括另一个对象。使用普通JS对象时,必须将其强制为唯一字符串

你们有什么建议,只有一个数组有多个 ajax阵列添加?换句话说,我如何删除额外的[]语法

您需要使用向数组中添加多个元素的方法之一,而不是添加数组本身。请参见下面的选项

要添加到现有阵列,可以使用.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的对象。您可以按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 item = data[id];
 var item = data.get(id);
在ES6中,或通过transpiling或使用多边形填充,也可以使用贴图对象

然后,要通过ID访问:

 var item = data[id];
 var item = data.get(id);

与使用常规JS对象相比,Map对象的一个优点是,您的id可以是任何数据类型,包括另一个对象。使用普通JS对象时,必须将其强制为唯一字符串。

如果使用ID作为键将数据保存在对象中,则可以解决这两个问题。将变量初始化为空对象:

var saved_data = {};
然后在AJAX回调函数中添加新对象:

ajax_data.forEach(function(object) {
    saved_data[object.ID] = object;
});

现在,您可以使用保存的数据[1]。最后一次访问特定对象。

如果将数据保存在对象中,使用ID作为键,则可以解决这两个问题。将变量初始化为空对象:

var saved_data = {};
然后在AJAX回调函数中添加新对象:

ajax_data.forEach(function(object) {
    saved_data[object.ID] = object;
});

现在您可以使用已保存的数据[1]。上次访问特定对象。

谢谢您的回复。我肯定会使用concat来实现额外的ajax阵列。然而,问题是第一个ajax阵列。它需要保存到一个数组中,结果是双括号:[[]]而不是一个。换句话说,我从ajax获得数组,需要将其保存到另一个数组中,结果是双括号,这是不可取的。@steveKim如果您第一次使用Conc,也不应该出现这种情况。谢谢您的回复。我肯定会使用concat来实现额外的ajax阵列。然而,问题是第一个ajax阵列。它需要保存到一个数组中,结果是双括号:[[]]而不是一个。换句话说,我从ajax获得数组,需要将其保存到另一个数组中,结果是双括号,这是不可取的。@steveKim如果您第一次使用Conc,也不应该出现这种情况。谢谢您的回复。我对ID索引很好奇。你有什么建议?感谢you@steveKim-我在回答的末尾添加了一些信息。谢谢你的回复。我在问题的底部添加了一部分,以包含该图像。将有大约100个对象具有多个关键点。我需要一个有效的方法来搜索ID的对象。你提到了单独的索引。这是怎么回事?@steveKim-你添加到问题中的数据都是相同的ID。我不明白你想怎么访问它。这些都应该折叠到一个数组项中的一个对象,因为它们都是相同的,还是都应该单独存储?如果单独存储,您希望索引如何工作。还是不明白你想解决什么问题。如果只有100个,您可以对数组进行暴力搜索并进行匹配。100对于今天的CPU来说不算什么。只需创建一个函数,搜索并获取您想要的内容。数据已被复制,我得到了lazy lol。但它将具有不同的值。感谢您的回复。我对ID索引很好奇。你有什么建议?感谢you@steveKim-我在回答的末尾添加了一些信息。谢谢你的回复。我在问题的底部添加了一部分,以包含该图像。将有大约100个对象具有多个关键点。我需要一个有效的方法来搜索ID的对象。你提到了单独的索引。这是怎么回事?@steveKim-你添加到问题中的数据都是相同的ID。我不明白你想怎么访问它。这些都应该折叠到一个数组项中的一个对象,因为它们都是相同的,还是都应该单独存储?如果单独存储,您希望索引如何工作。还是不明白你想解决什么问题。如果只有100个,您可以对数组进行暴力搜索并进行匹配。100对于今天的CPU来说不算什么。只需创建一个函数,搜索并获取所需的内容。数据已被复制,我得到了lazy lol。但它将具有不同的值。