web-dev-qa-db-ja.com

オブジェクトを配列に追加する方法

どうやったら オブジェクトを配列に追加できます (JavaScriptやjqueryで)たとえば、このコードの問題は何ですか?

function(){
    var a = new array();
    var b = new object();
    a[0]=b;
}

このコードを使用して、function1の配列に多数のオブジェクトを保存し、その配列内のオブジェクトを使用するためにfunction2を呼び出します。

  1. オブジェクトを配列に保存する方法
  2. オブジェクトを配列に入れて変数に保存する方法を教えてください。
267
naser

Array.Push()を使用して何かを配列に入れます。

var a=[], b={};
a.Push(b);    
// a[0] === b;

配列に関する追加情報

一度に複数のアイテムを追加する

var x = ['a'];
x.Push('b', 'c');
// x = ['a', 'b', 'c']

配列の先頭に項目を追加する

var x = ['c', 'd'];
x.unshift('a', 'b');
// x = ['a', 'b', 'c', 'd']

ある配列の内容を別の配列に追加する

var x = ['a', 'b', 'c'];
var y = ['d', 'e', 'f'];
x.Push.apply(x, y);
// x = ['a', 'b', 'c', 'd', 'e', 'f']
// y = ['d', 'e', 'f']  (remains unchanged)

2つの配列の内容から新しい配列を作成する

var x = ['a', 'b', 'c'];
var y = ['d', 'e', 'f'];
var z = x.concat(y);
// x = ['a', 'b', 'c']  (remains unchanged)
// y = ['d', 'e', 'f']  (remains unchanged)
// z = ['a', 'b', 'c', 'd', 'e', 'f']
568
John Strickler

まず第一に、objectarrayはありません。 ObjectArrayがあります。次に、あなたはすることができます:

a = new Array();
b = new Object();
a[0] = b;

これでabを唯一の要素とする配列になります。

50
Gabi Purcaru
var years = [];
for (i= 2015;i<=2030;i=i+1)
{
years.Push({operator : i})
}

ここで配列年はのような値を持っています

years[0]={operator:2015}
years[1]={operator:2016}

それはこのように続きます。

47
santhosh
  • JavaScriptは 大文字と小文字を区別しますnew array()new object()を呼び出すと、存在しないのでReferenceErrorがスローされます。
  • エラーを起こしやすい振る舞いのため、new Array()は避けた方がいいでしょう
    代わりに、新しい配列に= [val1, val2, val_n]を割り当ててください。オブジェクトの場合は= {}を使用してください。
  • (Johnの answer に示されているように)配列を拡張することに関しては多くの方法がありますが、最も安全な方法はconcatの代わりに Push を使用することです。 concatは新しい配列を返し、元の配列はそのまま残します。特に配列がグローバルに定義されている場合、Pushは、 を避けるべき呼び出し配列を変更します
  • 意図しない突然変異を避けるために、オブジェクトと新しい配列を freeze することもお勧めです。フリーズされたオブジェクトは可変でも拡張可能でもありません(浅い)。

これらの点を適用して2つの質問に答えるために、次のような機能を定義できます。

function appendObjTo(thatArray, newObj) {
  const frozenObj = Object.freeze(newObj);
  return Object.freeze(thatArray.concat(frozenObj));
}

使用法:

// Given
const myArray = ["A", "B"];
// "save it to a variable"
const newArray = appendObjTo(myArray, {hello: "world!"});
// returns: ["A", "B", {hello: "world!"}]. myArray did not change.
19

ES6表記を使うと、このようなことができます:

追加するには、 spread演算子 を次のように使用します。

var arr1 = [1,2,3]
var obj = 4
var newData = [...arr1, obj] // [1,2,3,4]
console.log(newData);
12
Aayushi

Gabi Purcaruの答えを拡張して、2番目の答えを含めます。

a = new Array();
b = new Object();
a[0] = b;

var c = a[0]; // c is now the object we inserted into a...
8
Sam

obejctは明らかにタイプミスです。しかしobjectarrayはどちらも大文字が必要です。

new Arraynew Objectには短い手を使うことができます。これらは[]{}です。

.Pushを使ってデータを配列にプッシュできます。これはそれを配列の最後に追加します。または、データを含むようにインデックスを設定することもできます。

function saveToArray() {
    var o = {};
    o.foo = 42;
    var arr = [];
    arr.Push(o);
    return arr;
}

function other() {
    var arr = saveToArray();
    alert(arr[0]);
}

other();
6
Raynos

代替の答えはこれです。

もしあなたがこのような配列を持っていれば:var contacts = [bob, mary];

この配列に別の配列を入れたい場合は、次のようにして行うことができます。

関数コンストラクタを宣言する

function add (firstName,lastName,email,phoneNumber) {
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
this.phoneNumber = phoneNumber;
}

関数からオブジェクトを作る:

var add1 = new add("Alba","Fas","[email protected]","[098] 654365364");

オブジェクトを配列に追加します。

contacts[contacts.length] = add1;
4
Po Po
/* array literal */
var aData = [];

/* object constructur */
function Data(firstname, lastname) {
  this.firstname = firstname;
  this.lastname = lastname;
  this.fullname = function() {
    return (this.firstname + " " + this.lastname);
  };
}

/* store object into array */
aData.Push(new Data("Jhon", "Doe"));
aData.Push(new Data("Anna", "Smith"));
aData.Push(new Data("Black", "Pearl"));

/* convert array of object into string json */
var jsonString = JSON.stringify(aData);
document.write(jsonString);

/* loop arrray */
for (var x in aData) {
  alert(aData[x].fullname());
}
3
antelove
a=[];
a.Push(['b','c','d','e','f']);
3
harjinder singh

自動リストでオブジェクト作成者を作成した方法は次のとおりです。

var list = [];

function saveToArray(x) {
    list.Push(x);
};

function newObject () {
    saveToArray(this);
};
2
Tadas Stundys

コードをそのまま使用すると、スコープの問題に遭遇します。あなたがそれらの間でそれを使用するつもりならばあなたはそれを関数の外側で宣言しなければなりません(あるいは呼び出すならば、それをパラメータとして渡します)。

var a = new Array();
var b = new Object();

function first() {
a.Push(b);
// Alternatively, a[a.length] = b
// both methods work fine
}

function second() {
var c = a[0];
}

// code
first();
// more code
second();
// even more code
0
josh.trow