我正在寻找以下解决方案:
在我的代码的很多地方,我需要找到一个与对象数组中的id匹配的对象,然后返回该对象的属性。引用的ID 在数组中可能存在或可能不存在。
我想出的最短的解决方案如下:
(如果该项目存在,则希望获取该项目的标题,否则不返回任何内容)
arrayofObjects = [ { id: 'a3ff3d', title: 'Tesla', color: 'Red }, { id: 'r43wesd', title: 'AMC', color: 'Rust }]
wantedObject = { queryTitle: 'Desired Car', id: 'a3ff3d' }
let wantedProperty = arrayOfObjects.some( e => e.id === wantedObject.id) ? arrayOfObjects.find(e => e.id === wantedObject.id).title : 'None Found'
但是,这既不优雅也不有效。我希望它是一个衬里而不是一个函数。
答案 0 :(得分:3)
最小的方法不一定是最有效的。我会这样:
let wantedProperty = (arrayOfObjects.find(obj => obj.id === wantedObject.id) || {}).title || 'None Found';
答案 1 :(得分:0)
使用Array#find进行销毁。
const data = [ { id: 'a3ff3d', title: 'Tesla', color: 'Red' }, { id: 'r43wesd', title: 'AMC', color: 'Rust' }];
function search(idToFind){
const res = data.find(({id}) => id === idToFind);
return res ? res.title : "Nothing found";
}
console.log(search('r43wesd'));
console.log(search('fail'));
答案 2 :(得分:0)
实际上,您可以为数据结构创建一个单行的通用方法,该方法可以重复使用多次:
const arrayOfObjects = [
{id: 'a3ff3d', title: 'Tesla', color: 'Red'},
{id: 'r43wesd', title: 'AMC', color: 'Rust'}
];
const getKey = (a, id, key) => (f = a.find(x => x.id === id)) ? f[[key]] : "Not Found";
console.log(getKey(arrayOfObjects, "a3ff3d", "title"));
console.log(getKey(arrayOfObjects, "r43wesd", "color"));
console.log(getKey(arrayOfObjects, "someid", "color"));
答案 3 :(得分:-1)
我想到了2种可能的解决方案。首先,我不建议这样做:
array.reduce((acc, cur) => {
return cur.id == searchedId ? cur.title : acc;
}, "None found");
尤其是如果您需要经常使用它,即使我们正在考虑一行代码,也请避免使用“复杂”代码。
第二个选项(如果您真的不想使用函数)是这个选项:
Array.prototype.findOrElse = function(cb, objcb, retValue) {
let findElem = this.find(elem => cb(elem));
return objcb(findElem) || retValue;
}
您可以这样称呼它:
array.findOrElse(elem => elem.id == searchedId, elem => elem.title, "None found");
通常我不选择这种方式,因为我不想接触js提供的本机对象,但是没有人禁止这样做。
编辑:
正如@PatrickRoberts使我注意到的那样,这实际上不是答案。我刚刚找到了2种可能的解决方案,出于不同的原因,我不建议这样做。函数具有此优点:即使是一行,也不必重复相同的代码。考虑一种可能的情况,在这种情况下,您可能必须检索其他属性而不是title
。
另一方面,在Array
对象的原型内部自定义函数是困难的:您试图使该函数尽可能通用,否则会使函数定义过于复杂。
那为什么不使用自己定义的函数呢?