我有这个数组
var data = [
{F: 'a', T: 'z', V:1},
{F: 'b', T: 'z', V:2},
{F: 'c', T: 'z', V:3}
]
我希望下面有这个数组 我使用了方法forEach
var nodes = [];
data.forEach(function(element) {
nodes.push({name:element.F})
nodes.push({name:element.T}
})
但在数组中有一个重复元素{name:' z'}但不想要重复元素,我想要下面的数组
[
{name:'a'},
{name:'b'},
{name:'c'},
{name:'z'},
]
答案 0 :(得分:0)
您可以先创建新的Set
,然后添加F
和T
的值,然后将该值转换为数组并使用map()
。
var data = [{F: 'a', T: 'z', V:1},{F: 'b', T: 'z', V:2},{F: 'c', T: 'z', V:3}]
var set = new Set()
data.forEach(function(e) {
if(e.F) set.add(e.F)
if(e.T) set.add(e.T)
})
var result = [...set].map(e => ({name: e}))
console.log(result)
答案 1 :(得分:0)
您可以使用哈希表,只推送不在哈希表中的值。
.as-console-wrapper { max-height: 100% !important; top: 0; }

{{1}}
答案 2 :(得分:0)
使用Array.prototype.reduce()
和Array.prototype.indexOf()
函数的解决方案:
var data = [{F: 'a', T: 'z', V:1}, {F: 'b', T: 'z', V:2}, {F: 'c', T: 'z', V:3}],
result = data.reduce(function (a, o) { // getting an array of unique values
if (a.indexOf(o.F) === -1) a.push(o.F);
if (a.indexOf(o.T) === -1) a.push(o.T);
return a;
}, [])
.map(function (v) { return {name: v}; });
console.log(result);
答案 3 :(得分:0)
或使用唯一键对象功能(仅当初始对象值(此处为数据)是可串行的时)(如果在代码中为no):
var data = [{ F: 'a', T: 'z', V: 1 }, { F: 'b', T: 'z', V: 2 }, { F: 'c', T: 'z', V: 3 }];
var result = Object.keys(
data.reduce( (memo, el) => {
memo[el.F] = undefined;
memo[el.T] = undefined;
return memo;
}, {})
).reduce( (memo, el) => {
memo.push({name: el});
return memo;
}, []);
console.log(result)