2017-12-13 19 views
0

객체 내부의 배열/배열 내부에 객체를 선언해야하는 경우에는 매우 혼란 스럽습니다. 객체JavaScript는 arrayobject 대 objectarray를 사용하는 경우?

var data = {interest:['a','b','c'], name:['Ali','Baba','Alan']} 

내부

var data = [{'Name': Alex,'Value': 2}] 

배열 배열 내부

개체 누군가의 도움이 설명 할 수 있습니까? 미리 감사드립니다.

+1

그것은 당신이 저장하는 데 필요한의 따라 달라집니다. 배열은 물건을 주문할 때 좋습니다. 객체는 속성에 직접 액세스하려는 경우에 적합합니다. 예를 들어 : 배열에서 객체를 찾는 것이 O (n)이고 여기에서 순서를 필요로하지 않기 때문에'[{name : 'foo'}, {name : 'bar'}]'는 좋은 생각이 아닙니다. – Epitouille

+1

객체 배열이나 배열 속성을 가진 객체가 필요한지 여부에 달려 있습니다 : p – emed

+0

'like bulletpoints 아래 테이블 대신 bulletpoints를 사용하는 경우' –

답변

1

두 표현은 모두 유효하지만,이 데이터로 무엇을하는지에 따라 하나를 선택해야합니다. 어떤 종류의 작업이 더 자주 발생합니까 : 추가/삭제 또는 읽기/찾기? 이 질문에 대한 답을 선택하는 데 도움이 될 수 있습니다.

개체 배열을 사용하면 엔티티를 추가/삭제하는 것이 더 쉬우 며 엔티티를 단일 원자 동작으로 수행 할 수 있습니다. 다음과 같은 경우를 생각해

배열의 객체와
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 

별도로 xy을 제거해야합니다 : 당신이 빈 값이 많이있을 때, 배열의 목적은 더있을 수 있습니다,

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; 
}, '')