배열 인 변수가 있고 배열의 모든 요소가 기본적으로 개체로 작동하기를 원합니다. 이를 달성하기 위해 코드에서 이와 같은 작업을 수행 할 수 있습니다.
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 = [{}, {}, {} /*, ... */];
편집 : 목표가 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" };
답변
fill () 사용할 수 있습니다 .
let arr = new Array(5).fill('lol');
let arr2 = new Array(5).fill({ test: 'a' });
// or if you want different objects
let arr3 = new Array(5).fill().map((_, i) => ({ id: i }));
5 개 항목의 배열을 생성합니다. 예를 들어 forEach를 사용할 수 있습니다.
arr.forEach(str => console.log(str));
할 때 new Array(5)
길이가 5 인 객체 일 뿐이고 배열은 비어 있습니다. 당신이 사용할 때 당신은 fill()
당신이 원하는 무엇이든 각 개별 지점을 채 웁니다.
답변
댓글에서 어떻게 응답했는지 확인한 후. push
다른 사람들이 제안한대로 사용하는 것이 가장 좋을 것 같습니다 . 이렇게하면 인덱스를 알 필요가 없지만 배열에 추가 할 수 있습니다.
var arr = [];
function funcInJsFile() {
// Do Stuff
var obj = {x: 54, y: 10};
arr.push(obj);
}
이 경우 해당 함수를 사용할 때마다 새 개체를 배열로 푸시합니다.
답변
공백을 만들 필요가 없습니다 Object
. 그들과 함께 아무것도 할 수 없습니다. 필요에 따라 샘플에 작업 개체를 추가하기 만하면됩니다. 사용 push
다니엘 Imms으로 제안하고, 프레데릭 Hamidi로 사용 리터럴은 제안했다. 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
요소 가있는 배열이 생성 됩니다.
답변
다음과 같이 “객체 유형”배열을 다음과 같이 한 줄로 인스턴스화 할 수 있습니다 ( 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])};
}
질문을 올바르게 이해하지 못했을 수도 있지만 이런 식으로 배열의 길이를 가져와 객체로 변환 할 수 있어야합니다. 다니엘은 정직하게 같은 대답을했습니다. 배열 길이를 그의 변수에 저장하면 완료됩니다.
제 생각에는 이것이 일어나지 않아야한다면 Array-length를 얻을 수 없습니다. 색인 번호를 얻지 않고 말했듯이 다음과 같이 할 수 있습니다.
var arrayContainingObjects = [];
for (;;){
try{
arrayContainingObjects.push {(property: arrayContainingYourItems[i])};
}
}
catch(err){
break;
}
위 버전의 좋지 않은 버전이지만 인덱스 범위를 “실행”할 때까지 루프가 실행됩니다.