Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中数组的排序索引_Javascript_Vue.js_Ecmascript 6_Vuejs2 - Fatal编程技术网

javascript中数组的排序索引

javascript中数组的排序索引,javascript,vue.js,ecmascript-6,vuejs2,Javascript,Vue.js,Ecmascript 6,Vuejs2,我正在尝试在Vuejs上构建一个小应用程序,其中我有一组数组,通过api响应生成,该数组提供以下输出: { "data": { "Real Estate Regulatory Act":[ { "id":603, "project_id":2392, "parent_type":"Real Estate Regulatory Act",

我正在尝试在
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:无法读取未定义的属性“SubscProdoDocument”

我已经在data()中定义了这个
子cprodocument
,并初始化为空数组。帮我解决这个问题。谢谢

这是解决方案:

var obj={
“数据”:
{
《房地产监管法》:[
{
“id”:603,
“项目id”:2392,
“母公司类型”:“房地产监管法”,
“类型”:“建筑平面图审批”,
“名称”:“FORMS.pdf”,
“链接”:https://.....DyumatHotelsFORMS.pdf"
}
],
“环境清理”:[
{
“id”:602,
“项目id”:2392,
“母公司类型”:“环境许可证”,
“类型”:“表格1”,
“名称”:“HotelsCPEMP.pdf”,
“链接”:https://.....MarineandDyumatHotelsCPEMP.pdf"
}
],
“文件”:[
{
“id”:601,
“项目id”:2392,
“父类型”:“文档”,
“类型”:“土地详情”,
“名称”:“FORMS.pdf”,
“链接”:https://....HotelsFORMS.pdf"
}
],
“其他批准”:[
{
“id”:604,
“项目id”:2392,
“父类型”:
“杂项批准”,
“类型”:“未报告”,
“名称”:“报告第1部分.pdf”,
“链接”:https://...Report 第1部分.pdf“
}
]
}
};
功能图(it){
var item={};
项目[it]=对象数据[it];
退货项目;
}

log(Object.keys(obj.data).sort().map(map))
您的
数据。如果您想对数据对象的项进行排序,数据对象应该是一个数组,因为您不能依赖
对象
中键的排序,因为它不能得到保证。
这是一个

您可以使用单行对数组进行排序和转换:

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数据={
“数据”:{
《房地产监管法》:[{
“id”:603,
“项目id”:2392,
“母公司类型”:“房地产监管法”,
“类型”:“建筑平面图审批”,
“名称”:“FORMS.pdf”,
“链接”:https://.....DyumatHotelsFORMS.pdf"
}],
“环境清理”:[{
“id”:602,
“项目id”:2392,
“母公司类型”:“环境许可证”,
“类型”:“表格1”,
“名称”:“HotelsCPEMP.pdf”,
“链接”:https://.....MarineandDyumatHotelsCPEMP.pdf"
}],
“文件”:[{
“id”:601,
“项目id”:2392,
“父类型”:“文档”,
“类型”:“土地详情”,
“名称”:“FORMS.pdf”,
“链接”:https://....HotelsFORMS.pdf"
}],
“其他批准”:[{
“id”:604,
“项目id”:2392,
“父类型”:
“杂项批准”,
“类型”:“未报告”,
“名称”:“报告第1部分.pdf”,
“链接”:https://...Report 第1部分.pdf“
}]
}
};
const orderedKeys=[‘文件’、‘环境许可’、‘房地产监管法’、‘杂项批准’];
data.data=orderedKeys.map(key=>({[key]:data.data[key]}));

console.log(数据)
您需要将
作为

或者取一个,它取外部范围的
这个

sortDocs.forEach(key => this.subscProDocument[key] = result.push(docs[key]));
从对象中获取数据并分配给
无序的
变量

const unordered = data.data;
声明新变量
已排序

const ordered = {};
对象。键
将从
无序对象
获取
键的数组
,然后将
排序功能
应用于
升序排序的键

然后,我们将在
键数组上执行
forEach
循环,并将带有键的值分配给
有序对象

Object.keys(unordered).sort().forEach(function(key) {
  ordered[key] = unordered[key];
});

console.log(ordered);

为什么不将已排序的键数组作为对象的有序访问器?@NinaScholz您可以共享一些链接,我可以从中了解更多信息。@NitishKumar为什么需要在对象中排序?什么时候可以直接使用密钥访问?此外,对象不符合担保顺序。如果希望按数组中的顺序访问属性。而不仅仅是在数组上循环并访问每个属性此错误是因为
引用了传递给
forEach()
的匿名
function(){}
。您可以
bind()
将该函数绑定到具有
subscrodocument
属性的对象。如果您想保持相同的结构,您至少必须将
data.data
对象更改为数组,因为JS对象中键的顺序无法保证,请参阅下面我的答案。您的
数据。数据
不是对象匹配array@CodeManiac,仅在输入数据中,而不是在转换后的输出中。似乎它在某个异步回调中,所以可能给定范围中的
与预期的不同,因此此时引用是不够的
const unordered = data.data;
const ordered = {};
Object.keys(unordered).sort().forEach(function(key) {
  ordered[key] = unordered[key];
});

console.log(ordered);