配列である変数があり、配列のすべての要素がデフォルトでオブジェクトとして機能するようにします。これを達成するために、私は私のコードでこのようなことをすることができます。
var sample = new Array();
sample[0] = new Object();
sample[1] = new Object();
これはうまく機能しますが、インデックス番号については触れたくありません。配列のすべての要素をオブジェクトにしたいです。宣言または初期化するにはどうすればいいですか。
var sample = new Array();
sample[] = new Object();
上記のコードを試しましたが、うまくいきません。インデックス番号を使わずにオブジェクトの配列を初期化するにはどうすればいいですか?
配列の末尾に項目を追加するには、array.Push()
を使用します。
var sample = new Array();
sample.Push(new Object());
これをn
回行うには、for
ループを使用します。
var n = 100;
var sample = new Array();
for (var i = 0; i < n; i++)
sample.Push(new Object());
new Array()
を[]
で、new Object()
を{}
で置き換えることもできます。
var n = 100;
var sample = [];
for (var i = 0; i < n; i++)
sample.Push({});
宣言の意味によっては、 配列リテラル の中で オブジェクトリテラル を使ってみることができます。
var sample = [{}, {}, {} /*, ... */];
EDIT:あなたの目標がデフォルトで空のオブジェクトリテラルであるundefined
項目である配列であれば、小さな効用関数を書くことができます。
function getDefaultObjectAt(array, index)
{
return array[index] = array[index] || {};
}
それからこのようにそれを使ってください:
var sample = [];
var obj = getDefaultObjectAt(sample, 0); // {} returned and stored at index 0.
あるいは:
getDefaultObjectAt(sample, 1).prop = "val"; // { prop: "val" } stored at index 1.
もちろん、getDefaultObjectAt()
の戻り値への直接代入はうまくいきませんので、書くことはできません。
getDefaultObjectAt(sample, 2) = { prop: "val" };
あなたがコメントでどのように反応したかを見た後。他の人が示唆しているようにPush
を使うのが最善のようです。こうすれば、インデックスを知る必要はありませんが、それでも配列に追加できます。
var arr = [];
function funcInJsFile() {
// Do Stuff
var obj = {x: 54, y: 10};
arr.Push(obj);
}
この場合、その関数を使用するたびに、新しいオブジェクトを配列にプッシュします。
空のObject
sを作成する必要はまったくありません。あなたは彼らと何もすることができません。必要に応じて作業オブジェクトをサンプルに追加するだけです。 Daniel Immsが示唆しているようにPush
を使用し、FrédéricHamidiが示唆しているようにリテラルを使用してください。あなたはCのようなJavascriptをプログラムしたいようです。
var samples = []; /* If you have no data to put in yet. */
/* Later, probably in a callback method with computed data */
/* replacing the constants. */
samples.Push(new Sample(1, 2, 3)); /* Assuming Sample is an object. */
/* or */
samples.Push({id: 23, chemical: "NO2", ppm: 1.4}); /* Object literal. */
new Array(10)
を使用すると、10個のundefined
要素を持つ配列が作成されると思います。
このように「オブジェクト型」の配列を1行でインスタンス化することができます(new Object()を自分のオブジェクトに置き換えてください)。
var elements = 1000;
var MyArray = Array.apply(null, Array(elements)).map(function () { return new Object(); });
さて、array.length
がうまくいくかどうか?のようなもの、私はあなたがちょうどそれを読んでいればあなたはインデックスの範囲を知る必要がないことを意味します..
var arrayContainingObjects = [];
for (var i = 0; i < arrayContainingYourItems.length; i++){
arrayContainingObjects.Push {(property: arrayContainingYourItems[i])};
}
多分私はあなたの質問を正しく理解していなかったかもしれませんが、あなたはこのようにあなたの配列の長さを得てそれらをオブジェクトに変換することができるはずです。ダニエルは、正直言って同じ答えを出しました。あなたは単にあなたの配列の長さを彼の変数に保存することができ、それは行われるでしょう。
私の考えではIFとこれは起こらないはずですあなたはあなたの配列の長さを取得することはできません。あなたがインデックス番号を取得せずに言ったように、あなたはこのようにそれをすることができました:
var arrayContainingObjects = [];
for (;;){
try{
arrayContainingObjects.Push {(property: arrayContainingYourItems[i])};
}
}
catch(err){
break;
}
それは上記のものの悪くないバージョンですが、ループはインデックスの範囲外で "実行"されるまで実行されます。
これを試して-
var arr = [];
arr.Push({});
//making array of book object
var books = [];
var new_book = {id: "book1", name: "twilight", category: "Movies", price: 10};
books.Push(new_book);
new_book = {id: "book2", name: "The_call", category: "Movies", price: 17};
books.Push(new_book);
console.log(books[0].id);
console.log(books[0].name);
console.log(books[0].category);
console.log(books[0].price);
// also we have array of albums
var albums = []
var new_album = {id: "album1", name: "Ahla w Ahla", category: "Music", price: 15};
albums.Push(new_album);
new_album = {id: "album2", name: "El-leila", category: "Music", price: 29};
albums.Push(new_album);
//Now, content [0] contains all books & content[1] contains all albums
var content = [];
content.Push(books);
content.Push(albums);
var my_books = content[0];
var my_albums = content[1];
console.log(my_books[0].name);
console.log(my_books[1].name);
console.log(my_albums[0].name);
console.log(my_albums[1].name);
この例は私と一緒に動作します。 ブラウザコンソールの出力のスナップショット
ForEachを使用して、すでにデータを持っている場合に備えてデータを保存できます。データに対して何らかのビジネスログインを行いたいのです。
var sample = new Array();
var x = 10;
var sample = [1,2,3,4,5,6,7,8,9];
var data = [];
sample.forEach(function(item){
data.Push(item);
})
document.write(data);
単純forループを使用した例
var data = [];
for(var i = 0 ; i < 10 ; i++){
data.Push(i);
}
document.write(data);
配列の末尾に項目を追加するには、array.Push()を使用してください。
var sample = new Array();
sample.Push(new Object());
あなたはそれを使うことができます
var x = 100;
var sample = [];
for(let i=0; i<x ;i++){
sample.Push({})
OR
sample.Push(new Object())
}
配列内のすべての要素をオブジェクトにする場合は、JavaScript Proxyを使用して、配列に挿入する前にオブジェクトに検証を適用できます。とても簡単です。
const arr = new Proxy(new Array(), {
set(target, key, value) {
if ((value !== null && typeof value === 'object') || key === 'length') {
return Reflect.set(...arguments);
} else {
throw new Error('Only objects are allowed');
}
}
});
今、あなたがこのようなことをやろうとするならば:
arr[0] = 'Hello World'; // Error
エラーが発生します。ただし、オブジェクトを挿入した場合は許可されます。
arr[0] = {}; // Allowed
プロキシの詳細については、このリンクを参照してください。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
あなたがpolyfillの実装を探しているなら、あなたはこのリンクをチェックアウトすることができます: https://github.com/GoogleChrome/proxy-polyfill