【发布时间】:2019-06-21 22:20:17
【问题描述】:
我目前正在从本地 JSON 文件呈现Labels 的列表(请参阅 JSON sn-p)。但是,有duplicates of them,我想让每个人都出现一次。我尝试实现Array.filter() 和其他一些方法来获得这一行:"Categories": obj.ResourceType.results.map(function(val) { return val.Label;,但我的语法有些问题,所以没有渲染。
有什么想法吗?理想情况下,我想用一些东西来替换这部分代码:
distinctArray(inp) {
let uniqueArr = [];
for(var i = 0; i < inp.length; i++) {
if(inp[i] == undefined) continue;
if(uniqueArr.indexOf(inp[i]) < 0) {
uniqueArr.push(inp[i]);
}
}
return uniqueArr;
}
,同时仍在处理它上面的这个部分:
let categories = this.distinctArray(temp).sort();
$("#km-labels").html(categories.join("<br>"));
JS sn-p:
import $ from 'jquery';
import JSONfile from '../../../public/JSONfile.json';
import { basename } from 'path';
var categories = '';
export default class {
constructor() {
this.loadData();
}
// ------------------------------------ //
loadData() {
let res = JSONfile.d.results.filter(function(val) {
return (val.FileLeafRef.trim().length > 0);
}).map(function(obj) {
return {
"FileName": obj.FileLeafRef,
"Path": obj.EncodedAbsUrl,
"Categories": obj.ResourceType.results.map(function(val) {
return val.Label;
}).join(";")
};
});
// debugger;
let temp = JSONfile.d.results.filter(function(val) {
return (val.FileLeafRef.trim().length > 0);
}).map(function(obj) {
return obj.ResourceType.results.map(function(val) {
return val.Label;
})
});
let categories = this.distinctArray(temp).sort();
$("#km-labels").html(categories.join("<br>"));
console.log(categories);
} // ------------- loadData
// ------------------------------------ //
distinctArray(inp){
let uniqueArr = [];
for(var i = 0; i < inp.length; i++) {
if(inp[i] == undefined) continue;
if(uniqueArr.indexOf(inp[i]) < 0) {
uniqueArr.push(inp[i]);
}
}
return uniqueArr;
}
JSON sn-p
{
"d": {
"results": [
{
"__metadata": {
"id": "[redacted]",
"uri": "[redacted]",
...
"type": "[redacted]"
},
"File": {
"__metadata": {
"id": "[redacted]",
"uri": "[redacted]",
"type": "SP.File"
},
"Name": "[redacted]"
},
"FileLeafRef": "[redacted]",
"ResourceType": {
"__metadata": {
"type": "Collection([redacted])"
},
"results": [
{
"Label": "Guides \uff06 Protocols",
...
...
}
]
},
"EncodedAbsUrl": "[redacted]"
},
{
"__metadata": {
"id": "[redacted]",
"uri": "[redacted]",
...
"type": "[redacted]"
},
"File": {
"__metadata": {
"id": "[redacted]",
"uri": "[redacted]",
"type": "[redacted]"
},
"Name": "[redacted]"
},
"FileLeafRef": "[redacted]",
"ResourceType": {
"__metadata": {
"type": "[redacted]"
},
"results": [
{
"Label": "Templates",
"TermGuid": "[redacted]",
...
},
{
"Label": "Guides \uff06 Protocols",
"TermGuid": "[redacted]",
...
}
]
},
"EncodedAbsUrl": "[redacted]"
},
...
...
更新:
let unique = {};
let temp = JSONfile.d.results.filter(function(val) {
return (val.FileLeafRef.trim().length > 0);
}).forEach(function(obj) {
obj.ResourceType.results.forEach(function(val) {
unique[val.Label] = val;
})
}).map(function(obj) {
return obj.ResourceType.results.map(function(val) {
return val.Label;
})
});
【问题讨论】:
-
temp是一个二维数组。distinctArray()需要一个平面数组。
标签: javascript jquery arrays json duplicates