두 표현은 모두 유효하지만,이 데이터로 무엇을하는지에 따라 하나를 선택해야합니다. 어떤 종류의 작업이 더 자주 발생합니까 : 추가/삭제 또는 읽기/찾기? 이 질문에 대한 답을 선택하는 데 도움이 될 수 있습니다.
개체 배열을 사용하면 엔티티를 추가/삭제하는 것이 더 쉬우 며 엔티티를 단일 원자 동작으로 수행 할 수 있습니다. 다음과 같은 경우를 생각해
배열의 객체와
var arr = [{x: 'a', y: 1}, {x: 'b', y: 2}];
arr.push({x: 'c', y: 3}); // add new to the end
var obj = arr.shift(); // remove first element of array and assign it to variable
별도로 x
및 y
을 제거해야합니다 : 당신이 빈 값이 많이있을 때, 배열의 목적은 더있을 수 있습니다,
var obj = {x: ['a', 'b'], y: [1, 2]};
// add
obj.x.push('c');
obj.y.push(3);
// remove
obj.x.shift();
obj.y.shift();
을하지만 컴팩트 한 표현 (읽기 : 네트워크를 통해 보낼 비트가 적음)과 무언가를 찾는 반복 (최소/최대).
var arr = [
{x: 'a'},
{y: 1},
{y: 2},
{y: 3},
{y: 4},
{y: 5},
{x: 'b', y: 6}
];
// Find max of x
var maxX = arr.reduce(function(max, obj) { // 7 iterations
return obj.x > max ? obj.x : max;
}, '')
배열의 객체와 같은
:
// more compact
var obj = {
x: ['a', 'b'],
y: [1, 2, 3, 4, 5, 6]
}
// less iterations (only 2 in this case)
var maxX = obj.x.reduce(function(max, val) {
return val > max ? val : max;
}, '')
그것은 당신이 저장하는 데 필요한의 따라 달라집니다. 배열은 물건을 주문할 때 좋습니다. 객체는 속성에 직접 액세스하려는 경우에 적합합니다. 예를 들어 : 배열에서 객체를 찾는 것이 O (n)이고 여기에서 순서를 필요로하지 않기 때문에'[{name : 'foo'}, {name : 'bar'}]'는 좋은 생각이 아닙니다. – Epitouille
객체 배열이나 배열 속성을 가진 객체가 필요한지 여부에 달려 있습니다 : p – emed
'like bulletpoints 아래 테이블 대신 bulletpoints를 사용하는 경우' –