Where art thou

题目要求

写一个 function,它遍历一个对象数组(第一个参数)并返回一个包含相匹配的属性-值对(第二个参数)的所有对象的数组。如果返回的数组中包含 source 对象的属性-值对,那么此对象的每一个属性-值对都必须存在于 collection 的对象中。

例如,如果第一个参数是 [{ first: “Romeo”, last: “Montague” }, { first: “Mercutio”, last: null }, { first: “Tybalt”, last: “Capulet” }],第二个参数是 { last: “Capulet” },那么你必须从数组(第一个参数)返回其中的第三个对象,因为它包含了作为第二个参数传递的属性-值对。

即返回数组[{ first: “Tybalt”, last: “Capulet” }]

解析

题目中给出了三个参考知识点

1、Global Object
2、Object.haveOwnProperty()
这个方法会返回一个布尔值,其用来判断对象是否含有指定的属性
e.g:

o = new Object();
o.prop = 'exists';

function changeO() {
  o.newprop = o.prop;
  delete o.prop;
}

o.hasOwnProperty('prop');   // 返回 true
changeO();
o.hasOwnProperty('prop');   // 返回 false

3、Obeject.keys();
该函数返回一个所有元素为字符串的数组,其元素来自于从给定的对象上面可直接枚举的属性。这些属性的顺序与手动遍历该对象属性时的一致。
e.g:

var arr = ["a", "b", "c"];
alert(Object.keys(arr)); // 弹出"0,1,2"

// 类数组对象
var obj = { 0 : "a", 1 : "b", 2 : "c"};
alert(Object.keys(obj)); // 弹出"0,1,2"

4、Array.filter(function(){})
本方法将生成一个满足function要求的新数组
e.g:

function isBigEnough(value) {
  return value >= 10;
}

var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
// filtered is [12, 130, 44]

解题思路

第一步:通过Object.keys()获取出待检测source中的key值
第二步:利用filter(function(){})完成对collection中满足要求的数据的筛选,并将其赋值给arr数组(filter函数中用设置的参数item来代表每一项)
第三步:将大象放进去
第四步:关上门
Javascript代码

function where(collection, source) {
  var arr = [];
  // What's in a name?
  var keys = Object.keys(source);
  arr = collection.filter(function(item){
    for(var i = 0;i<keys.length;i++){
      if(!item.hasOwnProperty(keys[i]) || item[keys[i]] !== source[keys[i]])
        return false;
    }
    return true;
  });
  return arr;
}

where([{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }], { last: "Capulet" });

原文地址: https://blog.csdn.net/weixin_31347831/article/details/55673509

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值