首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用_.intersection获取id的名称

使用_.intersection获取id的名称
EN

Stack Overflow用户
提问于 2017-12-11 15:21:49
回答 2查看 202关注 0票数 0

通过使用Lodash,我想要交叉我的数据并找到每个req.user.scope的城市名称。

代码语言:javascript
复制
var citys=[{id:26,name:"CITY_A",buildings:[{id:48,name:"B1"},{id:52,name:"B2"},{id:47,name:"B3"},{id:53,name:"B4"}],menu:[{name:"LINK_A",link:"<link_to_a>"},{name:"LINK_B",link:"<link_to_b>"}]},{id:81,name:"CITY_B",buildings:[{id:106,name:"Salle B1"},{id:107,name:"B2s"},{id:108,name:"B3"},{id:109,name:"B4"},{id:110,name:"B5"}]},{id:80,name:"CITY_C",buildings:[{id:111,name:"B1"},{id:114,name:"B2"},{id:112,name:"B3"},{id:113,name:"B4"},{id:115,name:"B5"}]},{id:79,name:"CITY_D",buildings:[{id:103,name:"B1"},{id:104,name:"B2"},{id:105,name:"B3"}]}];

var req = {
    user : {
    scope : [26, 79]
  }, 
  params : {
    code : 53
  }
}

我尝试了以下几点:

代码语言:javascript
复制
console.log(_.intersectionBy(req.user.scope.map(function(id){
    return {id : id}
}), citys, "id"))

但没有成功。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-11 15:26:10

_.intersectionBy()方法返回传递给它的第一个数组的结果,因此您应该切换传递给_.intersectionBy()的数组的顺序(首先应该是城市):

代码语言:javascript
复制
var citys=[{id:26,name:"CITY_A",buildings:[{id:48,name:"B1"},{id:52,name:"B2"},{id:47,name:"B3"},{id:53,name:"B4"}],menu:[{name:"LINK_A",link:"<link_to_a>"},{name:"LINK_B",link:"<link_to_b>"}]},{id:81,name:"CITY_B",buildings:[{id:106,name:"Salle B1"},{id:107,name:"B2s"},{id:108,name:"B3"},{id:109,name:"B4"},{id:110,name:"B5"}]},{id:80,name:"CITY_C",buildings:[{id:111,name:"B1"},{id:114,name:"B2"},{id:112,name:"B3"},{id:113,name:"B4"},{id:115,name:"B5"}]},{id:79,name:"CITY_D",buildings:[{id:103,name:"B1"},{id:104,name:"B2"},{id:105,name:"B3"}]}];

var req = {"user":{"scope":[26,79]},"params":{"code":53}};

var result = _.intersectionBy(citys, req.user.scope.map(function(id){
    return {id : id}
}), "id");

console.log(result);
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

不需要在相交之前进行映射,您可以使用_.intersectionWith()

代码语言:javascript
复制
var citys = [{id:26,name:"CITY_A",buildings:[{id:48,name:"B1"},{id:52,name:"B2"},{id:47,name:"B3"},{id:53,name:"B4"}],menu:[{name:"LINK_A",link:"<link_to_a>"},{name:"LINK_B",link:"<link_to_b>"}]},{id:81,name:"CITY_B",buildings:[{id:106,name:"Salle B1"},{id:107,name:"B2s"},{id:108,name:"B3"},{id:109,name:"B4"},{id:110,name:"B5"}]},{id:80,name:"CITY_C",buildings:[{id:111,name:"B1"},{id:114,name:"B2"},{id:112,name:"B3"},{id:113,name:"B4"},{id:115,name:"B5"}]},{id:79,name:"CITY_D",buildings:[{id:103,name:"B1"},{id:104,name:"B2"},{id:105,name:"B3"}]}];

var req = {"user":{"scope":[26,79]},"params":{"code":53}};

var result = _.intersectionWith(citys, req.user.scope, function(arrVal, othVal) {
  return arrVal.id === othVal;
});

console.log(result)
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

票数 0
EN

Stack Overflow用户

发布于 2017-12-11 15:42:31

我想提出一个替代方案,‘_..map’,如果您正在寻找从id获取名称的方法,那么_.map听起来很适合这项任务。

代码语言:javascript
复制
var citys = [{id:26,name:"CITY_A",buildings:[{id:48,name:"B1"},{id:52,name:"B2"},{id:47,name:"B3"},{id:53,name:"B4"}],menu:[{name:"LINK_A",link:"<link_to_a>"},{name:"LINK_B",link:"<link_to_b>"}]},{id:81,name:"CITY_B",buildings:[{id:106,name:"Salle B1"},{id:107,name:"B2s"},{id:108,name:"B3"},{id:109,name:"B4"},{id:110,name:"B5"}]},{id:80,name:"CITY_C",buildings:[{id:111,name:"B1"},{id:114,name:"B2"},{id:112,name:"B3"},{id:113,name:"B4"},{id:115,name:"B5"}]},{id:79,name:"CITY_D",buildings:[{id:103,name:"B1"},{id:104,name:"B2"},{id:105,name:"B3"}]}];

var req = {
    user : {
      scope : [26, 79, 181] // <-- add extra id, just to show unmatched case
    }, 
    params : {
      code : 53
    }
  };

var result = _.map(req.user.scope, cityId => _.find(citys, city => city.id === cityId));

console.log(result);

// to archive only 'intersect' result, you could add _.compact([...arr]) to remove undefined value from result.

var intersectedResult = _.compact(result);
console.log('intersected', intersectedResult);
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47756036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档