gpt4 book ai didi

javascript - 通过匹配其他数组来更改对象属性的位置

转载 作者:行者123 更新时间:2023-12-01 02:50:36 25 4
gpt4 key购买 nike

我有一个对象

var $data = {
D_1_AA_Changes.xml: "This is a string",
D_2_Compare_AA_Changes.xml: "This is a string"
}

我需要将该属性与我拥有的另一个数组相匹配,如下所示:

var list_match = ["D_2_Compare_AA_Changes","D_1_AA_Changes"]; 

我需要将 list_match$data 属性进行匹配,并将 $data 对象排列为 list_match 数组值。

所以匹配后我必须像这样排列$data:

$data = {
D_2_Compare_AA_Changes.xml: "This is a string",
D_1_AA_Changes.xml: "This is a string"
}

所以我需要像上面这样的最终结果

最佳答案

可以在完全兼容的 ES2015+ JavaScript 引擎中执行此操作,但一般来说,最好将对象属性视为无序,因为许多对象属性操作(例如 for-in)即使在 ES2015+ 中,也不能保证遵循新的顺序(例如 Object.getOwnPropertyNamesJSON.stringify)。当您序列化和反序列化(例如,传入和传出 JSON)时,顺序也不一定保持不变。它可能,但不能保证一定如此。*依赖无保证的行为会导致微妙的、浪费时间的错误。

但是如果您想在 ES2015+ 引擎上执行此操作,请创建一个新对象并按照您希望的顺序添加这些属性:

const $data = {
"D_1_AA_Changes.xml": "This is a string",
"D_2_Compare_AA_Changes.xml": "This is a string"
};

var list_match = ["D_2_Compare_AA_Changes","D_1_AA_Changes"];

console.log("before", JSON.stringify($data));

const $newData = {};
for (const entry of list_match) {
const name = entry + ".xml";
$newData[name] = $data[name];
}

console.log("after", JSON.stringify($newData));

请注意,它在这种情况下有效,因为属性名称看起来不像数组索引,并且这些是“自己的”属性。看起来像数组索引的属性名称不会像其他属性名称那样按创建顺序列出。

再次强调:强烈建议不要尝试使用对象属性顺序。

更多阅读:

<小时/>

* JSON.stringify 保证遵循该顺序,但该 JSON 的使用者不一定。

关于javascript - 通过匹配其他数组来更改对象属性的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46988728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com