gpt4 book ai didi

javascript - 使用递归过滤 JavaScript 中的对象数据

转载 作者:行者123 更新时间:2023-11-28 05:31:26 24 4
gpt4 key购买 nike

有一个对象包含其他对象。该对象的键可以是未定义的、已定义的或空的。我只对这些键的定义值而不是空值感兴趣。我将展示示例:数据对象

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: ["zurb@gmail.com"] }

最佳答案

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;
}

嘿,所以我用几个辅助函数重写了您的原始代码以提高可读性。这应该可以满足您的需求。

关于javascript - 使用递归过滤 JavaScript 中的对象数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39670850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com