Javascript 在给定值数组时从json中提取单个属性

Javascript 在给定值数组时从json中提取单个属性,javascript,typescript,lodash,Javascript,Typescript,Lodash,当提供ID数组时,我们如何从json检索名称 [ { "id": 0, "name": "salesTransNo" }, { "id": 1, "name": "terminalNo" }, { "id": 2, "name": "salesTransDate" }, { "id": 3, "name": "salesTransTime" },

当提供ID数组时,我们如何从json检索名称

[
   {
      "id": 0,
      "name": "salesTransNo"
   },
   {
      "id": 1,
      "name": "terminalNo"
   },
   {
      "id": 2,
      "name": "salesTransDate"
   },
   {
      "id": 3,
      "name": "salesTransTime"
   },
   {
      "id": 4,
      "name": "exceptionAmount"
   },
   {
      "id": 5,
      "name": "laneNumber"
   }
]
当给定
id
值的数组时,我只想从JSON中检索到数组中的名称

例如:id的数组:[2,4,5]

输出应为:

["salesTransDate","exceptionAmount","LaneNumber"]
我们如何使用Lodash或JavaScript实现这一点


我使用
.find
.map
从结果中只提取名称,但它只对单个值有效,如果我要传递像[2,4,5]这样的数组,它就不起作用了。

可以过滤对象,然后映射所需的属性

var data=[{id:0,name:“salesTransNo”},{id:1,name:“terminalNo”},{id:2,name:“salesTransDate”},{id:3,name:“salesTransTime”},{id:4,name:“exceptionAmount”},{id:5,name:“laneNumber”},
ids=[2,4,5],
结果=数据
.filter(({id})=>ids.includes(id))
.map(({name})=>name);
控制台日志(结果)
var项目=[{
“id”:0,
“名称”:“salesTransNo”
},
{
“id”:1,
“名称”:“终端号”
},
{
“id”:2,
“名称”:“salesTransDate”
},
{
“id”:3,
“名称”:“salesTransTime”
},
{
“id”:4,
“名称”:“例外装载”
},
{
“id”:5,
“名称”:“laneNumber”
}
]
var iname=items.filter(items=>[2,4,5]。包括(items.id));
for(iname的变量名称)

{console.log(names.name);}
您可以使用lodash的链,以及:

var data=[{id:0,name:“salesTransNo”},{id:1,name:“terminalNo”},{id:2,name:“salesTransDate”},{id:3,name:“salesTransTime”},{id:4,name:“exceptionAmount”},{id:5,name:“laneNumber”};
var-id=[2,4,5];
var结果=(数据)
.keyBy('id')//按id转换为字典
.at(id)//获取id与id数组匹配的项
.map('name')//提取名称
.value();
控制台日志(结果)
您可以使用,其中参数顺序必须是集合第一,ID第二,最后是比较器

var result = _.intersectionWith(data, ids, (a, b) => a.id == b);
var数据=[{
id:0,
名称:“salesTransNo”
}, {
id:1,
名称:“终端号”
}, {
id:2,
名称:“salesTransDate”
}, {
id:3,
名称:“salesTransTime”
}, {
id:4,
名称:“例外装载”
}, {
id:5,
名称:“兰纳姆伯”
}],
ids=[2,4,5];
var result=u.intersectionWith(数据,id,(a,b)=>a.id==b);
控制台日志(结果)
香草JS:

var arr = [
   { "id": 0, "name": "salesTransNo"  },
   { "id": 1, "name": "terminalNo" },
   { "id": 2, "name": "salesTransDate" },
   { "id": 3, "name": "salesTransTime" },
   { "id": 4, "name": "exceptionAmount" },
   { "id": 5, "name": "laneNumber" }
];

var indexes = arr.map ( function ( d ) { return d.id; });

var id = 4; // Requested arr.id item
var select_name = arr[indexes.indexOf(id)].name;
如果希望返回多个结果,可以构建如下函数:

function getNamesFromArr ( list_of_ids ) {
   var result = [];
   for ( var i = 0; i < list_of_ids.length; i++ ) {
      var indexes = arr.map ( function ( d ) { return d.id; });
      var select_name = arr[indexes.indexOf(list_of_ids[i])].name;
      result.push ( select_name );
   }
   return result;
}

getNamesFromArr ([ 2, 4, 5 ]); // Returns ["salesTransDate", "exceptionAmount", "laneNumber"]
函数getNamesFromArr(ID列表){ var结果=[]; 对于(var i=0;i
注意:为了简单起见,我省略了错误处理。考虑捕获-x 1的值(

)。