JS学习笔记: 找出包含特定键值对的对象(集合中对象匹配问题)

前言

提示:题目引用自:https://chinese.freecodecamp.org ,JS中级算法部分


提示:复制代码是毫无意义的行为

一、题目描述

创建一个查看对象数组(第一个参数)的函数,并返回具有匹配的名称和值对的所有对象的数组(第二个参数)。
如果要包含在返回的数组中,则源对象的每个名称和值对都必须存在于集合中的对象中。

比如,如果第一个参数是 [{ first: “Romeo”, last: “Montague” }, { first: “Mercutio”, last: null }, { first: “Tybalt”, last: “Capulet” }],第二个参数是 { last: “Capulet” }。

(就是给定对象A和对象B,在A中找到包含B的对象,返回所有满足条件的对象)

二、解题思路

将集合中的对象逐个提取出来,进行对比分析。
(思路特别简单,难点在于提取对象信息的操作,代码中已经详细标明注释)

三、通过代码

function whatIsInAName(collection, source) {
  let arr = [];
  let test0= Object.keys(source);//获取source属性
  //console.log(source[test0[0]])  获取属性值
  //console.log(test0[0])          获取属性字符串形式
  //console.log(test0)

  for(let i=0; i<collection.length; i++){   //遍历collection中每一个对象
    let test1 = Object.keys(collection[i]); //获取collection中第i个对象的属性
    let sum = 0;          // 标记source内容是否全部匹配成功

    for(let j=0; j<test0.length; j++){      //遍历source对象的属性
      for(let z=0; z<test1.length; z++){    //遍历collection[i]对象的属性
        //判断source 与 collection 属性与值对等关系
        if(test0[j]==test1[z] && collection[i][test1[z]] == source[test0[j]]){
          sum++; //代表source成功匹配的对象数量
          break; //若满足条件,立即退出循环,时间优化
        }
      } 
    }
    if(sum == test0.length){   //判断source成功匹配的对象数量 与 所含的数是否相等,
      arr.push(collection[i]); //匹配成功保存结果
    }
 }
 return arr;
}
whatIsInAName([{ "apple": 1, "bat": 2 }, { "bat": 2 }, { "apple": 1, "bat": 2, "cookie": 2 }], { "apple": 1, "bat": 2 }) 






总结

将头脑放清醒:动手去做这是学习的最好方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值