如何检查 JSON 对象数组是不是包含数组中定义的值?

Posted

技术标签:

【中文标题】如何检查 JSON 对象数组是不是包含数组中定义的值?【英文标题】:How to check if the JSON Object array contains the value defined in an arrary or not?如何检查 JSON 对象数组是否包含数组中定义的值? 【发布时间】:2018-04-25 02:43:30 【问题描述】:

我有以下 JSON 数据。

categories = [
    catValue:1, catName: 'Arts, crafts, and collectibles',
    catValue:2, catName: 'Baby',
    catValue:3, catName: 'Beauty and fragrances',
    catValue:4, catName: 'Books and magazines',
    catValue:5, catName: 'Business to business',
    catValue:6, catName: 'Clothing, accessories, and shoes',
    catValue:7, catName: 'Antiques',
    catValue:8, catName: 'Art and craft supplies',
    catValue:9, catName: 'Art dealers and galleries',
    catValue:10, catName: 'Camera and photographic supplies',
    catValue:11, catName: 'Digital art',
    catValue:12, catName: 'Memorabilia'
];

var categoriesJson = JSON.stringify(categories);

还有下面的数组。

var mainCat = ['Arts, crafts, and collectibles', 'Baby' , 'Antiques']

在循环 JSON 数据时,我需要检查 Object 值是否列在数组中。如果是,则做其他事情。

例如

$.each(categoriesJson , function (key, value) 
    if(value.catName is in array) 
        //do something here 
     else 
        //do something here
    
);

我怎样才能做到这一点?

【问题讨论】:

array.indexOf(value.catName) !== -1 // 在数组中 How to check if a string array contains one string in javascript?的可能重复 另见:***.com/q/237104/5894241 【参考方案1】:

尝试以下方法:

var categories = [
    catValue:1, catName: 'Arts, crafts, and collectibles',
    catValue:2, catName: 'Baby',
    catValue:3, catName: 'Beauty and fragrances',
    catValue:4, catName: 'Books and magazines',
    catValue:5, catName: 'Business to business',
    catValue:6, catName: 'Clothing, accessories, and shoes',
    catValue:7, catName: 'Antiques',
    catValue:8, catName: 'Art and craft supplies',
    catValue:9, catName: 'Art dealers and galleries',
    catValue:10, catName: 'Camera and photographic supplies',
    catValue:11, catName: 'Digital art',
    catValue:12, catName: 'Memorabilia'
];

var categoriesJson = JSON.stringify(categories);
var mainCat = ['Arts, crafts, and collectibles', 'Baby' , 'Antiques']

$.each(JSON.parse(categoriesJson) , function (key, value) 
  if(mainCat.indexOf(value.catName) > -1)
   console.log('Exists: ' +value.catName)
 
 else
   console.log('Does not exists: ' +value.catName)
 
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

【讨论】:

【参考方案2】:

我会filter初始数据数组得到匹配类别的数组:

var matchedCategories = categories.filter(i => mainCat.indexOf(i.catName) >= 0);

然后你可以通过迭代这个子数组来做你需要的事情。

【讨论】:

【参考方案3】:

我也使用 @dhilt 方法,但包含

例如。如果甚至包含一个(返回布尔值)

  categories.filter(i =>
    mainCat.includes(i.catName)
  ).length > 0
    ? true
    : false;

【讨论】:

以上是关于如何检查 JSON 对象数组是不是包含数组中定义的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 JSON 对象数组中是不是存在键

如何检查包含另一个对象数组的对象数组是不是具有属性

在 Oracle PL/SQL 中,如何检查 JSON 对象是不是包含特定键的元素

如何检查数组的至少一项是不是包含在对象数组中并遍历所有对象(JS)

如何检查数组是不是包含至少一个对象?

如何检查json数据数组是不是返回值