我有一个变量,它是一个数组,我想要的数组的每个元素作为默认的对象。要做到这一点,我可以做这样的事情在我的代码。
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({});
使用的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())
}
及如何使用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);
如果你想要一个数组中的所有元素是对象,你可以使用JavaScript代理,你在一个阵列,将其插入到目标应用验证。这是很简单的,
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
如果你正在寻找一个填充工具实现你可以检出此链接:https://github.com/GoogleChrome/proxy-polyfill
下面的代码从我的项目也许你对你有好处
reCalculateDetailSummary(updateMode: boolean) {
var summaryList: any = [];
var list: any;
if (updateMode) { list = this.state.pageParams.data.chargeDefinitionList }
else {
list = this.state.chargeDefinitionList;
}
list.forEach((item: any) => {
if (summaryList == null || summaryList.length == 0) {
var obj = {
chargeClassification: item.classfication,
totalChargeAmount: item.chargeAmount
};
summaryList.push(obj);
} else {
if (summaryList.find((x: any) => x.chargeClassification == item.classfication)) {
summaryList.find((x: any) => x.chargeClassification == item.classfication)
.totalChargeAmount += item.chargeAmount;
}
}
});
if (summaryList != null && summaryList.length != 0) {
summaryList.push({
chargeClassification: 'Total',
totalChargeAmount: summaryList.reduce((a: any, b: any) => a + b).totalChargeAmount
})
}
this.setState({ detailSummaryList: summaryList });
}
var ArrayofObjects = [{}]; //An empty array of objects.
根据你所说的述说,你可以尝试在object literals使用array literal:
var sample = [{}, {}, {} /*, ... */];
编辑:如果你的目标是一个数组,其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。你不能做他们什么。只需根据需要添加你的工作对象的样本。使用push
丹尼尔IMMS建议,并使用文字作为弗雷德里克·哈米迪建议。你似乎要像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
元素的数组。
您可以在一行中实例化“对象类型”的数组像这样(只是你的对象替换新的对象()):
var elements = 1000;
var MyArray = Array.apply(null, Array(elements)).map(function () { return new Object(); });
您可以使用fill()。
let arr = new Array(5).fill('lol');
// or if you want different objects
let arr2 = new Array(5).fill().map(x => ({ test: 'a' }));
将创建5个项目的数组。然后你可以使用的forEach例如。
arr.forEach(str => console.log(str));
那么array.length
应该做的伎俩还是没有?类似的,我的意思是,你不需要知道索引范围,如果你只是读它..
var arrayContainingObjects = [];
for (var i = 0; i < arrayContainingYourItems.length; i++){
arrayContainingObjects.push {(property: arrayContainingYourItems[i])};
}
也许我没有正确地理解你的问题,但你应该能够得到您的数组的长度,这样并将它们转换为对象。丹尼尔种了同样的回答是诚实的。你可以只保存数组长度在他的变量,它会做。
IF和这不应该在我看来发生,你不能让你的数组长度。至于你说的W / O得到的索引号,你可以做这样的:
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);