어떤 객체 내에서 배열 값을 평평하게하고 싶습니다. 아래 sample
과 같습니다. 해결책은 ecommerce
에 적용해서는 안되며 글자 그대로 객체에 배열 유형으로 포함될 수있는 모든 것을 적용해야합니다. 예 : I 출력이되고 싶습니다자바 스크립트 : 객체 (배열 된) 내 모든 배열 값을 평평하게합니다.
var sample = {
price: "999",
description: "...",
ecommerce: {
products: [
{
brand: "apple",
category: "phone"
},
{
brand: "google",
category: "services"
}
]
}
};
그리고 :
{
price: "999",
description: "..."
ecommerce: {
products_1: {
brand: "apple",
category: "phone"
},
products_2: {
brand: "google",
category: "services"
}
}
}
자바 스크립트 (ES6/7)에서이 작업을 수행하는 가장 효율적인 방법은 무엇입니까?
미리 감사드립니다.
의견 및 여러 개의 분노로 인해 업데이트되었습니다. 질문이 처음 요청되었을 때 너무 빨리 빠져 나간 사람들이 그것을 취소하면 좋을까요?
나는이 그 완전히 잘못 시도하고 확실 프로그래머에게이 일을 더 나은 기능 방법이야 : 두 솔루션은 ecommerce
방법에 너무 집착했다으로보고 :
function flattenArray(array) {
var obj = array.reduce((acc, cur, i) => {
acc[i] = cur;
return acc;
}, {});
return obj;
}
function cleanObject(object) {
for (let key in object) {
let testObject = object[key];
if (Array.isArray(testObject)) {
testObject = flattenArray(testObject)
} else if (typeof(testObject) === 'object') {
testObject = cleanObject(testObject);
}
return testObject;
}
return object;
}
var clean = cleanObject(sample);
UPDATE (2) 다음 개체는 솔루션의 일이었다 할 경우 : 그 또한 너무 다른 중첩 수준에서이 다른 key
입니다뿐만 아니라
var sample = {
price: "999",
description: "...",
differentArray: [
{
brand: "apple",
category: "phone"
},
{
brand: "google",
category: "services"
}
]
};
공지 사항. 내가 할 줄 무엇
어떻게 현재의 구현입니다 ... 따라서, 하나는 중복 로직을 제거 할 수 단계를 살균 두 가지 기능 및 교류/상호 재귀로 결말? – mersocarlin
...이 [일반적으로'Array # reduce' 기반 접근법] (https://stackoverflow.com/questions/47221864/javascript-flatten-any-array-values-within-object-nested/47266505#47266505)을 확인하십시오.)는 두 가지 솔루션을 제공합니다. 하나는 간단한 재귀와 함께 제공되고 두 번째는 교대/역방향 재귀를 사용합니다. –