2016-11-06 6 views
0

にオブジェクトの配列を変換する私はこのフォームネストされた形

nnz=[{ 

    "verb":"has", 

    "nouns": "employees" 
    }, 

    { 

    "verb":"has", 
    "nouns": "managers" 
    }, 

    { 

    "verb":"have", 
    "nouns": "departments" 
    } 
] 

内のオブジェクトの配列を持っていますが、私はこのフォーム

[ { 

    "verb":"has", 
    "nouns": ["employees", "managers"] 
    }, 

    { 
    "verb":"have", 
    nouns:["departments"] 
    } 
] 

に変換したいと、この作品から行う必要がありますクライアント側。私はnode.jsで働いています。私は、ユーザーが各動詞に対して複数の名詞を選択できるようにしたいと思います。動詞に対して名詞を選択すると、上記の形式で配列に保存する必要があります。私はどのように私はこのロジックを実装することができますそれを把握することができません。

更新:私たちは動詞もチェックする必要があります。それはもっと難しくなりました。

答えて

0

あなたは組み込み関数いくつかの配列を使用して、このようsomethong行うことができます。

const array = [ 
 

 
    { 
 

 
    "verb":"has", 
 

 
    "nouns": "employees" 
 
    }, 
 

 
    { 
 

 
    "verb":"has", 
 
    "nouns": "managers" 
 
    }, 
 

 
    { 
 

 
    "verb":"has", 
 
    "nouns": "departments" 
 
    } 
 
] 
 

 
const aggregated = array.reduce((arr, el) =>{ 
 
    let found = arr.find(ll => ll.verb == el.verb); 
 
    if(found) found.nouns.push(el.nouns); 
 
    else arr.push({verb : el.verb, nouns : [el.nouns] }) 
 
    return arr; 
 
}, []); 
 
console.log(aggregated);

0

まずキー、次に押し、既存のデータを繰り返すよう動詞の値を使用して一時オブジェクトを作成します。その一時的なオブジェクトの対応する配列に名詞を付けます。

次に、一時オブジェクトを新しい配列にマップします。

nnz = [{ 
 
    "verb": "has", 
 
    "nouns": "employees" 
 
}, { 
 
    "verb": "has", 
 
    "nouns": "managers" 
 
}, { 
 
    "verb": "has", 
 
    "nouns": "departments" 
 
}] 
 

 
var tmp = {}; 
 
nnz.forEach(function(item) { 
 
    tmp[item.verb] = tmp[item.verb] || { 
 
    verb: item.verb, 
 
    nouns: [] 
 
    }; 
 
    tmp[item.verb].nouns.push(item.nouns); 
 
}); 
 

 
var results = Object.keys(tmp).map(function(key) { 
 
    return tmp[key]; 
 
}); 
 

 
console.log(results);

0

あなたの要件ごととして、これら二つのアプローチを試してみてください。私は期待通りに動作することを願って

最初のアプローチ:

var nnz = [{ 
 
"verb":"has", 
 
"nouns": "employees" 
 
    }, 
 
    { 
 
"verb":"has", 
 
"nouns": "managers" 
 
    }, 
 
{ 
 
"verb":"has", 
 
"nouns": "departments" 
 
    } 
 
]; 
 

 
var newObj = {}; 
 
var nouns = []; 
 
for (var i in nnz) { 
 
nouns.push(nnz[i].nouns); 
 
newObj.verb = nnz[i].verb; 
 
newObj.nouns = nouns; 
 
} 
 
    
 
nnz = newObj; 
 

 
console.log(nnz);

第二のアプローチ:

あなたがプロパティ名を知っているあなたが知らない

プロパティ名:

var nnz = [{ 
 
    "verb":"has", 
 
    "nouns": "employees" 
 
    }, 
 
    { 
 
    "verb":"has", 
 
    "nouns": "managers" 
 
    }, 
 
    { 
 
    "verb":"has", 
 
    "nouns": "departments" 
 
    } 
 
]; 
 

 
var newObj = {}; 
 
var nounsArr = []; 
 
for (var i in nnz) { 
 
nounsArr.push(nnz[i][Object.keys(nnz[i])[1]]) 
 
nnz[i][Object.keys(nnz[i])[1]] = nounsArr; 
 
var Objlen = Object.keys(nnz[i]).length; 
 
for (var j=0;j<Objlen;j++) { 
 
var objKeys = Object.keys(nnz[i])[j]; 
 
newObj[objKeys] = nnz[i][objKeys]; 
 
} 
 
} 
 

 
nnz = newObj; 
 

 
console.log(nnz);

関連する問題