我有两个对象x和y
var x = { 1: 1, 2: 2, hi: "hi" };
var y = { hello: "hello", coffee: "coffee" };
我想将它们合并为一个。
_.extend(y, x);
我希望y中的所有键首先跟随x中的键。但是,这就是我在结果中得到的结果
{1: 1, 2: 2, hello: "hello", coffee: "coffee", hi: "hi"}
首先出现数字键,然后是y和x中的键。
我们如何让y中的所有键首先跟随x中的键?
答案 0 :(得分:0)
如上所述,对象没有命令。虽然大多数浏览器都尊重订单,但如果您正在谈论非关键的内容,那么您可能能够放弃信任浏览器的行为(即使它不是规范 - 规范是没有秩序)。
更符合规范的方法是使用数组,例如:
/// Creates a septary type named `s3`, with a unit type named `s1`, each digit
/// stored in a `u8`, with three digits.
nary_type! { s3, s1, 7, u8, 3 }
http://codepen.io/cjke/pen/BWjPOO?editors=0010
如果出于某种奇怪的原因,你无法改变你的下拉菜单,你可以通过对象的方式来做(但请在开始时看到免责声明):
var x = { 1: 1, 2: 2, hi: "hi" };
var y = { hello: "hello", coffee: "coffee" };
var a = [];
_.mapValues(x, function(v, k) {
a.push({ key: k, value: v });
});
_.mapValues(y, function(v, k) {
a.push({ key: k, value: v });
})
// ES6 (no lodash):
var a = [
...x.map((value, key) => ({ key, value })),
...y.map((value, key) => ({ key, value })),
];
答案 1 :(得分:0)
我不确定lodash是否是此解决方案的要求,但我读到您正在使用此代码进行反应,因此JSX也在那里工作。我注意到键名与值相同。所以我认为我们可以删除其中一个。我选择将继承的密钥替换为由函数生成的数字密钥。 concat创建订单,分配数字键的forEach维护该订单。可能有更多雄辩的解决方案,但我希望这会有所帮助!
var x = { 1: 1, 2: 2, hi: "hi" };
var y = { hello: "hello", coffee: "coffee" };
function createObj(obj1, obj2) {
let result = {};
const arr = [...Object.values(obj2).concat(Object.values(obj1))];
arr.forEach((v, i) => {
result[i] = v;
})
return result
}
createObj(x, y)