[英]Sorting indexes of an array in javascript
我正在尝试在Vuejs
上构建一个小型应用程序,其中有一组通过api响应提供的数组,该数组提供以下输出:
{
"data":
{
"Real Estate Regulatory Act":[
{
"id":603,
"project_id":2392,
"parent_type":"Real Estate Regulatory Act",
"type":"Building Plan Approval",
"name":"FORMS.pdf",
"link":"https://.....DyumatHotelsFORMS.pdf"
}
],
"Environmental Clearance":[
{
"id":602,
"project_id":2392,
"parent_type":"Environmental Clearance",
"type":"Form 1",
"name":"HotelsCPEMP.pdf",
"link":"https://.....MarineandDyumatHotelsCPEMP.pdf"
}
],
"Document":[
{
"id":601,
"project_id":2392,
"parent_type":"Document",
"type":"Land Details",
"name":"FORMS.pdf",
"link":"https://....HotelsFORMS.pdf"
}
],
"Miscellaneous Approvals":[
{
"id":604,
"project_id":2392,
"parent_type":
"Miscellaneous Approvals",
"type":"Not Reported",
"name":"Report Part 1.pdf",
"link":"https://...Report Part 1.pdf"
}
]
}
}
我想根据有关以下数组的索引对这个javascript进行排序:
['Document', 'Environmental Clearance', 'Real Estate Regulatory Act', 'Miscellaneous Approvals']
所以我的最终结果将是:
{
"data":
{
"Document":[
{
"id":601,
"project_id":2392,
"parent_type":"Document",
"type":"Land Details",
"name":"FORMS.pdf",
"link":"https://....HotelsFORMS.pdf"
}
],
"Environmental Clearance":[
{
"id":602,
"project_id":2392,
"parent_type":"Environmental Clearance",
"type":"Form 1",
"name":"HotelsCPEMP.pdf",
"link":"https://.....MarineandDyumatHotelsCPEMP.pdf"
}
],
"Real Estate Regulatory Act":[
{
"id":603,
"project_id":2392,
"parent_type":"Real Estate Regulatory Act",
"type":"Building Plan Approval",
"name":"FORMS.pdf",
"link":"https://.....DyumatHotelsFORMS.pdf"
}
],
"Miscellaneous Approvals":[
{
"id":604,
"project_id":2392,
"parent_type":
"Miscellaneous Approvals",
"type":"Not Reported",
"name":"Report Part 1.pdf",
"link":"https://...Report Part 1.pdf"
}
]
}
}
我的代码当前如下所示:
if(response.status === 200)
{
let docs = response.data.data;
let sortDocs = ['Document', 'Environmental Clearance', 'Real Estate Regulatory Act', 'Miscellaneous Approvals'];
let result = []
sortDocs.forEach(function(key) {
this.subscProDocument[key] = result.push(docs[key])
})
}
我收到类似以下内容的错误:
未捕获(承诺)TypeError:无法读取未定义的属性“ subscProDocument”
我已经在data()中定义了此subscProDocument
,并将其初始化为空数组。 帮我解决这个问题。 谢谢
let data = {
"data":
{
"Real Estate Regulatory Act":[
{
"id":603,
"project_id":2392,
"parent_type":"Real Estate Regulatory Act",
"type":"Building Plan Approval",
"name":"FORMS.pdf",
"link":"https://.....DyumatHotelsFORMS.pdf"
}
],
"Environmental Clearance":[
{
"id":602,
"project_id":2392,
"parent_type":"Environmental Clearance",
"type":"Form 1",
"name":"HotelsCPEMP.pdf",
"link":"https://.....MarineandDyumatHotelsCPEMP.pdf"
}
],
"Document":[
{
"id":601,
"project_id":2392,
"parent_type":"Document",
"type":"Land Details",
"name":"FORMS.pdf",
"link":"https://....HotelsFORMS.pdf"
}
],
"Miscellaneous Approvals":[
{
"id":604,
"project_id":2392,
"parent_type":
"Miscellaneous Approvals",
"type":"Not Reported",
"name":"Report Part 1.pdf",
"link":"https://...Report Part 1.pdf"
}
]
}
};
从对象获取数据并分配给unordered
变量
const unordered = data.data;
声明ordered
新变量
const ordered = {};
Object.keys
将从unordered object
获取keys
的数组,然后将sort function
应用到键上以进行ascending sort
。
然后我们将在array of keys
执行forEach
循环,并将带键的值赋给ordered object
;
Object.keys(unordered).sort().forEach(function(key) {
ordered[key] = unordered[key];
});
console.log(ordered);
这是解决方案:
var obj={ "data": { "Real Estate Regulatory Act":[ { "id":603, "project_id":2392, "parent_type":"Real Estate Regulatory Act", "type":"Building Plan Approval", "name":"FORMS.pdf", "link":"https://.....DyumatHotelsFORMS.pdf" } ], "Environmental Clearance":[ { "id":602, "project_id":2392, "parent_type":"Environmental Clearance", "type":"Form 1", "name":"HotelsCPEMP.pdf", "link":"https://.....MarineandDyumatHotelsCPEMP.pdf" } ], "Document":[ { "id":601, "project_id":2392, "parent_type":"Document", "type":"Land Details", "name":"FORMS.pdf", "link":"https://....HotelsFORMS.pdf" } ], "Miscellaneous Approvals":[ { "id":604, "project_id":2392, "parent_type": "Miscellaneous Approvals", "type":"Not Reported", "name":"Report Part 1.pdf", "link":"https://...Report Part 1.pdf" } ] } }; function map(it){ var item={}; item[it]=obj.data[it]; return item; } console.log(Object.keys(obj.data).sort().map(map));
如果要对项进行排序 , 则 data.data
对象应为数组 ,因为不能保证Object
中键的顺序,因此不能依赖它。 这是关于JS对象中的键排序的文章
您可以执行以下排序并将其转换为一行的数组:
data.data = orderedKeys.map(key => ({ [key]: data.data[key] }));
这将为您提供:
{
"data": [
{
"Document": [{
"id": 601,
"project_id": 2392,
...
}]
},
{
"Environmental Clearance": [{
"id": 602,
"project_id": 2392,
...
}]
},
{
"Real Estate Regulatory Act": [{
"id": 603,
"project_id": 2392,
...
}]
},
{
"Miscellaneous Approvals": [{
"id": 604,
"project_id": 2392,
...
}]
}
]
}
这是一个工作示例:
const data = { "data": { "Real Estate Regulatory Act": [{ "id":603, "project_id":2392, "parent_type":"Real Estate Regulatory Act", "type":"Building Plan Approval", "name":"FORMS.pdf", "link":"https://.....DyumatHotelsFORMS.pdf" }], "Environmental Clearance": [{ "id":602, "project_id":2392, "parent_type":"Environmental Clearance", "type":"Form 1", "name":"HotelsCPEMP.pdf", "link":"https://.....MarineandDyumatHotelsCPEMP.pdf" }], "Document": [{ "id":601, "project_id":2392, "parent_type":"Document", "type":"Land Details", "name":"FORMS.pdf", "link":"https://....HotelsFORMS.pdf" }], "Miscellaneous Approvals": [{ "id":604, "project_id":2392, "parent_type": "Miscellaneous Approvals", "type":"Not Reported", "name":"Report Part 1.pdf", "link":"https://...Report Part 1.pdf" }] } }; const orderedKeys = ['Document', 'Environmental Clearance', 'Real Estate Regulatory Act', 'Miscellaneous Approvals']; data.data = orderedKeys.map(key => ({ [key]: data.data[key] })); console.log(data)
您需要this
进行引用,因为thisArg
是Array#forEach
thisArg
sortDocs.forEach(function(key) {
this.subscProDocument[key] = result.push(docs[key]);
}, this);
或采取箭头功能 ,它接受this
外部范围的。
sortDocs.forEach(key => this.subscProDocument[key] = result.push(docs[key]));
let obj = {
"data":
{
"Real Estate Regulatory Act":[
{
"id":603,
"project_id":2392,
"parent_type":"Real Estate Regulatory Act",
"type":"Building Plan Approval",
"name":"FORMS.pdf",
"link":"https://.....DyumatHotelsFORMS.pdf"
}
],
"Environmental Clearance":[
{
"id":602,
"project_id":2392,
"parent_type":"Environmental Clearance",
"type":"Form 1",
"name":"HotelsCPEMP.pdf",
"link":"https://.....MarineandDyumatHotelsCPEMP.pdf"
}
],
"Document":[
{
"id":601,
"project_id":2392,
"parent_type":"Document",
"type":"Land Details",
"name":"FORMS.pdf",
"link":"https://....HotelsFORMS.pdf"
}
],
"Miscellaneous Approvals":[
{
"id":604,
"project_id":2392,
"parent_type":
"Miscellaneous Approvals",
"type":"Not Reported",
"name":"Report Part 1.pdf",
"link":"https://...Report Part 1.pdf"
}
]
}
};
const orderedObj = { data: {} };
Object.keys(obj.data).sort().forEach(function(key) {
orderedObj.data[key] = obj.data[key];
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.