Javascript 检查对象的任何数组中是否包含特定值

Javascript 检查对象的任何数组中是否包含特定值,javascript,internet-explorer-9,ecmascript-5,Javascript,Internet Explorer 9,Ecmascript 5,如何确定对象是否有值 我的对象如下所示:我必须循环遍历对象数组并检查数组的值中是否有“配偶”。如果存在设置一个标志spooseexits=true并在变量'spooseIndex'中存储号码(在这种情况下(4,因为[配偶]号码是4) 此函数也需要在IE9中呈现。 eligibilityMap = { "CHIP": [ "CHILD5" ], "APTC/CSR": [ "

如何确定对象是否有值

我的对象如下所示:我必须循环遍历对象数组并检查数组的值中是否有“配偶”。如果存在
设置一个标志spooseexits=true
在变量'spooseIndex'中存储号码(在这种情况下(4,因为[配偶]号码是4)

此函数也需要在IE9中呈现。

eligibilityMap = {
    "CHIP": [
        "CHILD5"
    ],
    "APTC/CSR": [
        "SELF1",
        "CHILD2",
        "CHILD3",
        "SPOUSE4"
    ]
}
代码:
喷注索引未定义。我做错了什么?

解决方案1:执行3个步骤

  • 您可以使用
    flatMap
    将所有子数组合并为一个

  • 使用
    findIndex
    startsWith
    结合使用,以准确获取
    配偶的索引

  • 根据找到的索引的值分配2个变量

  • const-eligibilityMap={“CHIP”:[“CHILD5”],“APTC/CSR”:[“SELF1”、“CHILD2”、“CHILD3”、“SPOUSE4”];
    设spooseexits=false,spooseindex=0;
    常量数组=Object.values(eligibilityMap).flatMap(r=>r);
    const index=arrays.findIndex(str=>str.startsWith(“配偶”);
    如果(索引>=0){
    这一点是正确的;
    spooseIndex=数组[index].slice(-1);
    }
    
    log({spooseexits,spooseindex});
    这里有一个简单的方法,支持所有浏览器,包括IE:

    var-seexists=false;
    var Spoosenumber;
    for(在eligibilityMap中输入var键)
    {
    for(eligibilityMap[key]中的var指数)
    {
    如果(eligibilityMap[key][index].indexOf(“配偶”)>-1)
    {
    spooseexists=true;
    配偶编号=eligibilityMap[键][索引]。替换(“配偶”,“索引”);
    打破
    }
    }
    }
    日志(spooseexists,spooseNumber);
    
    您的条件
    元素。indexOf('party')>=0
    与数组中的任何值party都不匹配,因为数组中没有名为party的值
    party
    但它有
    spoose4
    。 这就是它返回未定义的原因

    您可以使用正则表达式而不是直接匹配

    Object.keys(eligibilityMap).reduce(function (acc, key) {
    const array1 = eligibilityMap[key];
    //console.log('array1', array1);
    // array1.forEach(element => console.log(element.indexOf('SPOUSE')))
    // var spouseExist = -1;
    var spouseExist = array1.filter(function (element,index) {
    
      if(element.match(/SPOUSE/g)) return element; //fixes
    });
    
    //fixes
    console.log('spouseExist',spouseExist.length>0)
    if(spouseExist.length>0){
        spouseExist.forEach(element => {
            console.log('spouseIndex',element[element.length-1])
        });
    }
    return acc;
    
    },{})

    您可以直接从配偶姓名中获取号码,也可以使用
    index
    的值从筛选函数内部访问匹配配偶的索引号码,然后执行任何您喜欢的操作。
    希望这符合您的要求。

    数组。forEach
    不会返回任何内容。您可以使用
    数组。一些
    数组。包括
    Object.values(eligibilityMap).some(arr=>arr.includes(“配偶”))
    Object.values不受ie9Use polyfills支持。还有,IE9。。。。???那么为什么要用ES6标记它呢?Array.some work你可以使用
    Object.keys(eligibilityMap).map(function(key){return eligibilityMap[key];})
    而不是
    .values()
    find(elem=>
    它看起来像箭头函数:)@Nguyễn Văn Phong--Object.entries,startsWith。。ie9不支持。
    Object.keys(eligibilityMap).reduce(function (acc, key) {
    const array1 = eligibilityMap[key];
    //console.log('array1', array1);
    // array1.forEach(element => console.log(element.indexOf('SPOUSE')))
    // var spouseExist = -1;
    var spouseExist = array1.filter(function (element,index) {
    
      if(element.match(/SPOUSE/g)) return element; //fixes
    });
    
    //fixes
    console.log('spouseExist',spouseExist.length>0)
    if(spouseExist.length>0){
        spouseExist.forEach(element => {
            console.log('spouseIndex',element[element.length-1])
        });
    }
    return acc;