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
结合使用,以准确获取配偶的索引
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;