2017-11-23 6 views
0

ネストされた値を1レベルまで移動できませんでした。名前プロパティを1レベルまで移動したいのですが、これをどのように変換できますかネストされたプロパティを1レベルまで持ち上げてjavascriptオブジェクトを変換します。

[{ 
    date: "1/11", 
    collections: [{ 
     device: {name: "camera 1"}, 
     count: 10 
    },{ 
     device: {name: "camera 2"}, 
     count: 20 
    },{ 
     device: {name: "camera 3"}, 
     count: 30 
    }] 
}] 

これには?

[{ 
    date: "1/11", 
    data: [{ 
     camera: "camera 1", 
     count: 10 
    },{ 
     camera: "camera 2", 
     count: 20 
    },{ 
     camera: "camera 3", 
     count: 30 
    }] 
}] 

私は、あなたは、配列をマッピングして、内側のコレクションの配列をマッピングする必要がありますhttp://jsfiddle.net/usjyc83u/

+0

あなたの質問にあなたのコードの関連部分を含めてください。また、元のままにしておく必要がありますか(変更コピーを作成するか)、変更を加えることができますか?また、あなたの例では、nameプロパティの移動/名前の変更に加えて、コレクションの名前を変更することも意図していることに注意してください。 – jcaron

答えて

1

で立ち往生しています。

注:このソリューションでは、BabelのObject rest spread transformが必要なproposal-object-rest-spreadが使用されます。

const data = [{"date":"1/11","collections":[{"device":{"name":"camera 1"},"count":10},{"device":{"name":"camera 2"},"count":20},{"device":{"name":"camera 3"},"count":30}]}]; 
 

 
const result = data.map(({ collections, ...o }) => ({ 
 
    ...o, 
 
    data: collections.map(({ device, ...r }) => ({ 
 
    ...r, 
 
    camera: device.name 
 
    })) 
 
})); 
 

 
console.log(result);

1

私はあなたの主な目的は、配列や単純なオブジェクトであるかどうかわからないです。私はあなたのオブジェクトを配列として扱いました。 data:私がやったことは、新しいキーを作成し、各オブジェクトのグローバルコレクション(=「は、アレイ内の各要素に対してこのアクションを行う」)

    1. マップです。その値は、配列
    2. は、あなたの所望の構造({camera: ..., count:...}
    3. における対象としてのcollectionsからオブジェクトを有するデータアレイを移入オブジェクトからcollectionsを除去します。 (あなたはそれを維持したい場合は、その行を削除)

    const yourData = [{ 
     
        date: "1/11", 
     
        collections: [{ 
     
        device: { 
     
         name: "camera 1" 
     
        }, 
     
        count: 10 
     
        }, { 
     
        device: { 
     
         name: "camera 2" 
     
        }, 
     
        count: 20 
     
        }, { 
     
        device: { 
     
         name: "camera 3" 
     
        }, 
     
        count: 30 
     
        }] 
     
    }]; 
     
    
     
    // using ES5+ syntax 
     
    // 1. map through your objects 
     
    yourData.map(el => { 
     
        // 2. set data array 
     
        el.data = []; 
     
        // 3. populate with required objects in correct structure 
     
        el.collections.forEach(o => { 
     
        el.data.push({ 
     
         camera: o.device.name, 
     
         count: o.count 
     
        }); 
     
        }); 
     
        // 4. remove the old data 
     
        delete el.collections; 
     
    }); 
     
    
     
    console.log(yourData);
    [{ date: "1/11", data: [{ camera: "camera 1", count: 10 },{ camera: "camera 2", count: 20 },{ camera: "camera 3", count: 30 }] }]

  • 関連する問題