我有一个对象
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"
}
所以我需要像上面那样的最终结果
答案 0 :(得分:2)
可以在完全兼容的ES2015 + JavaScript引擎中执行此操作,但一般情况下,最好将对象属性视为无序,因为许多对象属性操作(如for-in
),即使在ES2015 +中也是如此,不保证遵循新订单使用的顺序(例如Object.getOwnPropertyNames
,JSON.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的使用者不一定。
答案 1 :(得分:0)
您可以使用数组中的顺序来访问对象属性,如此
list_match.forEach(function(key) {
var myData = $data[key];
/* you can check that `myData` is not undefined */
})