Javascript:根据键的值有条件地过滤 JSON? [复制]
Posted
技术标签:
【中文标题】Javascript:根据键的值有条件地过滤 JSON? [复制]【英文标题】:Javascript: Filter a JSON conditionally based on the value of a key? [duplicate] 【发布时间】:2019-03-18 05:06:30 【问题描述】:在检索到这样的 JSON 后:
"JSON": [
"mySchool": "college",
"myHome": "apartment",
"myFavoriteSport": "soccer"
,
"mySchool": "highschool",
"myHome": "house",
"myFavoriteSport": "hockey"
,
"mySchool": "college",
"myHome": "box",
"myFavoriteSport": "soccer"
,
"mySchool": "elementary",
"myHome": "tent",
"myFavoriteSport": "soccer"
]
如何有条件地过滤它,以便...如果soccer
是myFavoriteSport
键的值,则返回包含myFavoriteSport: soccer
对的所有对象的数组?我确定我最终会将pushing
对象放入数组中,但我不太清楚如何将其单独列出,以便将其分配给变量。
我确信它会涉及某种类型的循环,但这是我第一次使用 JSON 和这种类型的对象,所以我有点不确定如何处理它。
【问题讨论】:
【参考方案1】:如果要过滤,请使用.filter
- 只需检查myFavoriteSport
属性是否为soccer
:
const input =
"JSON": [
"mySchool": "college",
"myHome": "apartment",
"myFavoriteSport": "soccer"
,
"mySchool": "highschool",
"myHome": "house",
"myFavoriteSport": "hockey"
,
"mySchool": "college",
"myHome": "box",
"myFavoriteSport": "soccer"
,
"mySchool": "elementary",
"myHome": "tent",
"myFavoriteSport": "soccer"
]
;
console.log(
input.JSON.filter(( myFavoriteSport ) => myFavoriteSport === 'soccer')
);
另请注意,JSON 是一种以字符串格式表示对象的方式。 (例如,
const myJSON = '["foo":"bar","baz":"buzz"]';
)。如果您有实际的对象/数组,那么它不是 JSON 格式 - 它只是一个普通对象。最好将密钥命名为 arr
或 personArr
或类似的名称。 There's no such thing as a "JSON Object"
【讨论】:
所以我试了一下,收到了很多错误。(node:62645) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'filter' of undefined at Object.module.exports.handler
就是其中之一
这是另一个at process._tickCallback (internal/process/next_tick.js:189:7) (node:62645) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catchblock, or by rejecting a promise which was not handled with .catch().
您没有指定 "JSON"
属性所在的对象变量的名称,因此无法从这里准确说出代码应该是什么 - 无论变量名称是什么,将其替换为input
在我的答案中的代码中的位置。例如myObj.JSON.filter
或类似的东西。
我以为我确实是这样指定的 const data = JSON.parse(response);
然后在你的答案中使用代码 console.log( data.JSON.filter(( myFavoriteSport ) => myFavoriteSport === 'Soccer') );
我 console.logged data
我知道它会正确记录 JSON【参考方案2】:
使用filter()
数组方法很容易实现,有一个单一的解决方案:你可以在回调函数中指定一个条件,最后你会得到一个新的项目数组,它符合这个条件。
const JSON = [
"mySchool": "college",
"myHome": "apartment",
"myFavoriteSport": "soccer"
,
"mySchool": "highschool",
"myHome": "house",
"myFavoriteSport": "hockey"
,
"mySchool": "college",
"myHome": "box",
"myFavoriteSport": "soccer"
,
"mySchool": "elementary",
"myHome": "tent",
"myFavoriteSport": "soccer"
];
const result = JSON.filter(item => item.myFavoriteSport === 'soccer');
console.log(result);
您也可以使用许多其他数组迭代方法来实现这样的结果,但filter
完全符合您的需求。
【讨论】:
以上是关于Javascript:根据键的值有条件地过滤 JSON? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何根据另一个参数的值有条件地禁用 Storybook 中的控件?