Javascript 在对象中每隔两个关键点重新排列一次
如何操纵此对象以重新排列值Javascript 在对象中每隔两个关键点重新排列一次,javascript,object,Javascript,Object,如何操纵此对象以重新排列值 let obj = [ {foo: 10, bar: 20}, ["apple"], {foo: 30, bar: 40}, ["pear"], {foo: 50, bar: 60}, ["orange"] ] // The output should be: // { "apple": { foo: 10, bar: 20 }, "pear": {...}, "orange": {...} } 我已经尝试了这里提供的解决方案: 但这不会
let obj = [
{foo: 10, bar: 20},
["apple"],
{foo: 30, bar: 40},
["pear"],
{foo: 50, bar: 60},
["orange"]
]
// The output should be:
// { "apple": { foo: 10, bar: 20 }, "pear": {...}, "orange": {...} }
我已经尝试了这里提供的解决方案:
但这不会输出所需的输出。使用
让obj=[{foo:10,bar:20},[“苹果”],{foo:30,bar:40},[“梨”],{foo:50,bar:60},[“橙色”];
var result={};
对于(设i=0;i使用
让obj=[{foo:10,bar:20},[“苹果”],{foo:30,bar:40},[“梨”],{foo:50,bar:60},[“橙色”];
var result={};
对于(设i=0;i可用于将此数组缩减为对象。请参见下面的逻辑
让obj=[{foo:10,bar:20},[“苹果”],{foo:30,bar:40},[“梨”],{foo:50,bar:60},[“橙色”];
常数arr=obj.reduce((a,el,i,arr)=>{
if(el instanceof数组){
a[el[0]]=arr[i-1];
}
返回a;
}, {});
控制台日志(arr)代码>可用于将此数组缩减为对象。请参见下面的逻辑
让obj=[{foo:10,bar:20},[“苹果”],{foo:30,bar:40},[“梨”],{foo:50,bar:60},[“橙色”];
常数arr=obj.reduce((a,el,i,arr)=>{
if(el instanceof数组){
a[el[0]]=arr[i-1];
}
返回a;
}, {});
控制台日志(arr)代码>您可以使用array.reduce:
var obj=[
{foo:10,bar:20},
[“苹果”],
{foo:30,bar:40},
[“梨”],
{foo:50,bar:60},
[“橙色”]
];
var result=obj.reduce((m,o,i)=>(Array.isArray(o)和&(m[o[0]]=obj[i-1]),m),{});
控制台日志(结果)代码>您可以使用array.reduce:
var obj=[
{foo:10,bar:20},
[“苹果”],
{foo:30,bar:40},
[“梨”],
{foo:50,bar:60},
[“橙色”]
];
var result=obj.reduce((m,o,i)=>(Array.isArray(o)和&(m[o[0]]=obj[i-1]),m),{});
控制台日志(结果)代码>啊哈。意思:最后一个i+=2
表示每两次迭代循环一次。然后,结果是包含第一个值(obj[i]
)的第二个值(obj[i]
)。为什么[obj[i+1][0]]
exaclty?@Remi中的方括号是用来设置对象中的动态属性的。由于属性名位于变量中(在本例中为数组中的数组),因此要获取值,需要使用方括号。可能对您有帮助的参考很少:[属性访问器](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_accessors)
,似乎@void(和Faly)提出的obj.prototype.reduce方法性能更好。不确定我用来衡量绩效的方法是否具有代表性,但仍然如此。所以我倾向于接受这一最佳答案。如果你不同意,请告诉我。(感谢您提供的信息)@Remi-reduce
将执行n
迭代,而for loop
将执行n/2
迭代。因此,for循环具有更好的性能。您是对的。根据您的输入,还创建了一个JSPerf:。结果是for循环的性能提高了+/-16%。啊哈。意思:最后一个i+=2
表示每两次迭代循环一次。然后,结果是包含第一个值(obj[i]
)的第二个值(obj[i]
)。为什么[obj[i+1][0]]
exaclty?@Remi中的方括号是用来设置对象中的动态属性的。由于属性名位于变量中(在本例中为数组中的数组),因此要获取值,需要使用方括号。可能对您有帮助的参考很少:[属性访问器](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_accessors)
,似乎@void(和Faly)提出的obj.prototype.reduce方法性能更好。不确定我用来衡量绩效的方法是否具有代表性,但仍然如此。所以我倾向于接受这一最佳答案。如果你不同意,请告诉我。(感谢您提供的信息)@Remi-reduce
将执行n
迭代,而for loop
将执行n/2
迭代。因此,for循环具有更好的性能。您是对的。根据您的输入,还创建了一个JSPerf:。结果是for循环的性能提高了+/-16%。我不喜欢这种方法,因为会有n/2
迭代,它们不会做任何有趣的事情。Nikhil的方法有什么好处?我不喜欢这种方法,因为会有n/2
迭代,不会做任何有趣的事情。Nikhil的方法有什么好处吗?很抱歉,你的答案看起来很像@void的答案。很抱歉,你的答案看起来很像@void的答案。