将javascript对象推送到数组

将javascript对象推送到数组,javascript,Javascript,我有一个循环通过一个对象数组MyArrayOfObjects,然后将对象推送到一个新数组,如下所示: var NewArray = new Array(); for (i = 0; i < MyArrayOfObjects.length; i++) { TempObject = null; TempObject = new Object(); // I have logic that copies certain properties but not others //

我有一个循环通过一个对象数组MyArrayOfObjects,然后将对象推送到一个新数组,如下所示:

var NewArray = new Array();

for (i = 0; i < MyArrayOfObjects.length; i++) {

  TempObject = null;
  TempObject = new Object();

 // I have logic that copies certain properties but not others
 // but overall it looks like this:

  TempObject.prop1 = MyArrayOfObjects[i].prop1;
  TempObject.prop2 = MyArrayOfObjects[i].prop2;

  NewArray.push(TempObject);
}
var NewArray=NewArray();
对于(i=0;i
当我在MyArrayOfObjects中循环时,我清除TempObject并每次创建一个新的TempObject。NewArray是否包含我正在复制的对象,或者只是对复制的对象的引用,然后在循环迭代时被删除


谢谢。

它包含对对象本身的引用

此代码显示了实际的概念(请注意,将对象推入数组后更改对象也会更改数组中的对象):


它包含对对象本身的引用

此代码显示了实际的概念(请注意,将对象推入数组后更改对象也会更改数组中的对象):

使用或其jquery可能是一种更惯用的方法。例如:

var oldArray = [
    { prop1: 1, prop2: 10 },
    { prop1: 2, prop2: 20 },
    { prop1: 3, prop2: 30 }
]

var newArray = $.map(oldArray, function(oldObj) {
    return { newProp: oldObj.prop1 }
})

console.log(newArray)
使用或其jquery可能是一种更惯用的方法。例如:

var oldArray = [
    { prop1: 1, prop2: 10 },
    { prop1: 2, prop2: 20 },
    { prop1: 3, prop2: 30 }
]

var newArray = $.map(oldArray, function(oldObj) {
    return { newProp: oldObj.prop1 }
})

console.log(newArray)
通常认为使用数组文字来创建数组更好。以大写字母开头的变量名通常用于构造函数。在变量名的开头使用“new”很容易变成“new Array”,并且名称应该反映其用途,因此类似以下内容可能更好:

var objectArray = [];

再次声明变量。当您要立即分配其他值时,分配null值没有任何用处。只需执行第二个赋值(并使用文字):

此时,TempObject和NewArray[NewArray.length-1]都引用同一个对象

> }
当我在MyArrayOfObjects中循环时,我清除TempObject并创建 每次一个新的

无需“清除”对象,只需为变量指定一个新值。在javascript中,所有变量都有一个可能是原语(例如字符串、数字)或对象引用(例如对象、数组、数字、字符串)的值

NewArray是否包含我正在创建的对象 复制或只是对已复制对象的引用,然后成为 在循环迭代时删除


它包含对每次迭代中创建的新对象的引用

由于变量包含对对象的引用,为变量指定新值对对象没有任何作用。当某个对象不再被任何变量或对象属性引用时,该对象可用于垃圾收集,并可在稍后运行垃圾收集时自动删除

通常认为使用数组文字来创建数组更好。以大写字母开头的变量名通常用于构造函数。在变量名的开头使用“new”很容易变成“new Array”,并且名称应该反映其用途,因此类似以下内容可能更好:

var objectArray = [];

再次声明变量。当您要立即分配其他值时,分配null值没有任何用处。只需执行第二个赋值(并使用文字):

此时,TempObject和NewArray[NewArray.length-1]都引用同一个对象

> }
当我在MyArrayOfObjects中循环时,我清除TempObject并创建 每次一个新的

无需“清除”对象,只需为变量指定一个新值。在javascript中,所有变量都有一个可能是原语(例如字符串、数字)或对象引用(例如对象、数组、数字、字符串)的值

NewArray是否包含我正在创建的对象 复制或只是对已复制对象的引用,然后成为 在循环迭代时删除


它包含对每次迭代中创建的新对象的引用


由于变量包含对对象的引用,为变量指定新值对对象没有任何作用。当一个对象不再被任何变量或对象属性引用时,它将可用于垃圾收集,并可能在以后垃圾收集运行时自动删除。

什么是
TempObject=null如果您有
TempObject=newobject()紧接着?我想确保在创建新对象之前清除初始对象。不需要空值?@frenchie正确,不需要空值。此外,您只需编写
var TempObject={}
甚至
var TempObject={prop1:MyArrayOfObject[i].prop1、prop2:MyArrayOfObjects[i].prop2}
甚至
NewArray.push({prop1:MyArrayOfObjects[i].prop1,prop2:MyArrayOfObjects[i].prop2});这三个都将导致10个新对象被推入数组。@Phrogz:有一堆if语句来确定要复制哪些属性,这就是我这样做的原因。感谢空值,我将从代码中删除该行如果您有
TempObject=newobject()紧接着?我想确保在创建新对象之前清除初始对象。不需要空值?@frenchie正确,不需要空值。此外,您只需编写
var TempObject={}
甚至
var TempObject={prop1:MyArrayOfObject[i].prop1、prop2:MyArrayOfObjects[i].prop2}
甚至
NewArray.push({prop1:MyArrayOfObjects[i].prop1,prop2:MyArrayOfObjects[i].prop2});这三个都将导致10个新对象被推入数组。@Phrogz:有一堆if语句来确定要复制哪些属性,这就是我为什么要这样做的原因
>   TempObject = null;
>   TempObject = new Object();
  var TempObject = {};
>  // I have logic that copies certain properties but not others
>  // but overall it looks like this:
> 
>   TempObject.prop1 = MyArrayOfObjects[i].prop1;
>   TempObject.prop2 = MyArrayOfObjects[i].prop2;
> 
>   NewArray.push(TempObject);
> }