他のオブジェクトを含むオブジェクトがあります。このオブジェクトのキーは、未定義、定義済み、または空にすることができます。私はこれらのキーの定義された値にのみ興味があり、空の値には興味がありません。例を示します:データオブジェクト
var d = {
google: {
email: 'zurb @gmail.com',
name: 'k-pop Dorama',
token: 'ya2XObIhOB63qjwlw',
id: '11971093321'
},
twitter: {
displayName: 'Smart as a Genius',
id: '47252187865',
name: 'Paul Peter',
token: '47252ijoGYJ40bFAKvX'
},
facebook: {
email: '',
id: '1112961258784387',
name: 'Tomash Khamlai',
token: 'ERUTT8xK2oE7ZD'
}
}
収集したいフィールド:
var f = ["name", "email"];
私が試した関数:
function iterate(data, fields) {
var response = Object.create({}, "");
var property;
for (property in data) {
if (data.hasOwnProperty(property)) {
if (typeof data[property] === "object")
iterate(data[property], fields);
else {
fields.forEach(function(element) {
if (property === element) {
if (data[property] !== "") {
if (!response[element]) {
response[element] = [];
response[element].push(data[property]);
} else {
response[element].push(data[property]);;
}
}
}
});
}
}
}
}
iterate(d, f);
期待:
console.log(response);
{ name: ["k-pop Dorama", "Paul Peter", "Tomash Khamlai"], email: ["[email protected]"] }
function isObj(obj, prop){
return typeof obj[prop] === "object"
}
function notContains(array, value){
return !array.includes(value) ;
}
function getter(data, fields){
var response = {};
(function iterate(data, fields){
Object.keys(data).forEach(function(prop){
if (isObj(data, prop)) iterate(data[prop], fields);
else{
fields.forEach(function (elem){
if(!response[elem]) response[elem] = [];
if(!!data[elem] && notContains(response[elem], data[elem])) response[elem].push(data[elem]);
});
}
});
})(data, fields);
return response;
}
ちょっと、読みやすくするためにいくつかのヘルパー関数を使用して元のコードを書き直しました。これはあなたが探しているものを手に入れるはずです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加