gpt4 book ai didi

Javascript:变量不是未定义的,而是在返回时返回未定义的

转载 作者:太空宇宙 更新时间:2023-11-04 15:35:09 24 4
gpt4 key购买 nike

在下面的代码片段中,在 return(res) 之前,我记录了它,它不是 undefined

但不知何故,它被返回为未定义

我做错了什么?

filterData = (inputData, searchedKey) => {
inputData.forEach((data, index) => {
if(data){
if(data.hasOwnProperty(searchedKey)){
const res = data[searchedKey]
console.log(res) /// logs the results
return(res) /// returns undefined
}
var dataToProcess = [];

var fieldKeys = Object.keys(data)
fieldKeys = fieldKeys.filter((field, index) => !field.includes("#"))
fieldKeys.forEach((key, index) => {
dataToProcess.push(data[key]);
})
this.filterData(dataToProcess, searchedKey)
}
})
}

console.log(this.filterData([{"#name": "foo", "#type": "bar"}], "#type"))

最佳答案

一些问题:

  • forEach 不会返回除 undefined 之外的任何内容,因此在其回调函数中返回值不会执行任何有用的操作。
  • 您的函数没有返回值
  • 不使用递归调用的返回值。
  • if (data) 不足以确保 data 是一个对象。例如,对于非零数也是如此。请改用 Object(data) === data
  • 由于可能有多个匹配项(在嵌套输入对象中),因此您的函数应该返回一个数组,这也是人们在看到您的函数名称时所期望的。标准数组 filter 方法也返回一个数组。所以这也是符合的。

以下是让它发挥作用的方法:

var filterData = (inputData, searchedKey) => {
inputData = inputData.filter( data => Object(data) === data );
return !inputData.length ? [] :
inputData.filter( data => data.hasOwnProperty(searchedKey) )
.map( data => data[searchedKey] )
// Add the results from recursion:
.concat(filterData([].concat(...
inputData.map( data =>
Object.keys(data)
.filter( key => !key.startsWith("#") )
.map( key => data[key] )
)
), searchedKey));
};

var data = [{
"#name": "foo",
"#title": "mr",
"deeper": [{
"#nope": "bad",
"deepest": [{
"nothing_here": null,
"#type": "deeper bar",
}]
}, {
"#type": "bar",
}]
}];

console.log(filterData(data, "#type"));

如果您只需要第一个匹配项,请使用此变体:

var filterData = (inputData, searchedKey) => {
inputData = inputData.filter( data => Object(data) === data );
var res = inputData.find( data => data.hasOwnProperty(searchedKey) );
return res !== undefined ? res[searchedKey] :
// Try in nested objects:
filterData([].concat(...
inputData.map( data =>
Object.keys(data)
.filter( key => !key.startsWith("#") )
.map( key => data[key] )
)
), searchedKey);
};

var data = [{
"#name": "foo",
"#title": "mr",
"deeper": [{
"#nope": "bad",
"deepest": [{
"nothing_here": null,
"#type": "deeper bar",
}]
}, {
"#type": "bar",
}]
}];

console.log(filterData(data, "#type"));

关于Javascript:变量不是未定义的,而是在返回时返回未定义的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44432525/

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