我正在处理一个从API获取对象数组的函数,在这些对象中它们是一个标记数组,我想返回这些对象的所有标记以填充标记中的选择字段。这是我到目前为止所得到的,它开始变得有点混乱我正在做的所有地图,它也返回值,但它返回它们与原始对象数组相同的长度,并摆脱任何重复。我做错了什么,或者他们是更好的方法,我正在使用lodash?
BSTR val = SysAllocString(L"/VirtualBox/GuestInfo/Net/0/V4/IP");
HRESULT hr = machine->GetGuestPropertyValue(val, &ip);
if (SUCCEEDED(hr))
{
wprintf(L"The machine's IP is: %s", ip);
}
else
printf("Error retrieving machine IP! rc = 0x%x\n", hr);
SysFreeString(val);
答案 0 :(得分:1)
使用reduce
我使代码更简洁,JS Bin上有一个可用的版本。你必须调整它以放入你的框架(它是React吗?)。
一个好的建议是寻找lodash方法的返回类型。
方法reduce
返回一个数组,这意味着我们不需要创建一个临时数组来保存我们的值,并直接分配给tags_array
。
// assuming your data is something like this...
var objects = [
{
name: 'a',
tags: ['a', 'b', 'c']
},
{
name: 'b',
tags: ['b', 'c', 'd']
},
{
name: 'c',
tags: ['a', 'c', 'd', 'e']
}
]
var tags_array = _.uniq( // returns a unique array.
_.reduce(objects, function(i, o){ // iterates through objects and
return o.tags; // returns o.tags each time
})
);
console.log(tags_array);
// #=> ["a", "c", "d", "e"]
所以你的功能可能会像这样,我猜:
renderOptions(){
let dataRef = this.props.designs.items;
var tags_array = _.uniq( // returns unique.
_.reduce(dataRef, function(i, o){ // iterates through objects and
return o.tags; // returns o.tags each time
})
);
return tags_array;
}
然后你可以在你的视图中遍历数组,或者调整renderOptions
函数来返回li html元素。
reduce
方法也可以用作下面提到的Palermo:
let tags_array = objects.reduce((i, o) => { return o.tags; });
所以不需要lodash。
答案 1 :(得分:0)
你甚至不需要lodash这样做。这是一种更清洁的方法
let tags_array = dataRef.reduce((i, o) => { return o.tags; });