【问题标题】:Transforming an array from key to value将数组从键转换为值
【发布时间】:2015-08-03 09:39:34
【问题描述】:

我有一个 match() 返回的数组。所以元素是这样排序的:

0 => "value1" 1 => "value2" ...

我想做的是创建一个新数组,该数组由作为第一个数组的值的键索引,所以它看起来是这样的:

value1 => "newValue1" value2 => "newValue2" ...

如何在 javascript 中做到这一点? (我的 javascript 不是很高级,如果您觉得它看起来很简单,请见谅)

【问题讨论】:

  • 键的值是什么?
  • 我以 value1 为例,并不是要替换为实际值。所以新的数组键名将是 value1、value2 等...

标签: javascript arrays


【解决方案1】:

我假设你在谈论这个方法https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/String/match

首先要知道,Javascript 中没有“索引数组”,最好的情况下只有一个对象。

假设你想从这里开始(索引是隐式的)

["value1", "value2", ...]

到这里

{
    "value1": "newValue1",
    "value2": "newValue2",
    [...]
},

一个简单的 forEach 就可以完成这项工作:

var myArray = ["value1", "value2", "value3"];
var result = {};

myArray.forEach(function(item){
    result[item] = "new"+item;    
});

这是一个 JSFiddle,可以执行您想要的操作:http://jsfiddle.net/0qqq6mm1/

【讨论】:

  • 谢谢,是的,我知道我必须为此使用一个对象,但不知道如何正确设置索引。非常感谢。就代码的效率而言,您认为哪种解决方案会更好,您的解决方案还是带有 .reduce() 的解决方案?
  • 对于这样一个简单的任务,我认为您不会注意到效率方面的任何差异,除非有数千/数百万个条目。如果你想要一个简单的比较,你可以看看这个 JSPerf:jsperf.com/foreach-vs-reduce-vs-for-loop。看来你最好的选择是“优化循环”。但是,其他一些标准可能会受到威胁。另外,你可以看看这个 SO 讨论:stackoverflow.com/questions/17546450/…
  • 谢谢! jsperf 对我来说很有趣 :) 我基本上会处理 200 个数据,它会在可能很旧的计算机上执行,但用户需要快速的结果(它是为律师准备的,所以时间就是金钱 :))。非常感谢您的帮助
【解决方案2】:

您可以使用Array.reduce,如下所示。

var arr1 = ["val1","val2","val3"];

var obj = arr1.reduce(function(prev,next,index){
    prev[next] = "newValue"+(index+1);
    return prev;
},{});

如果您要打印obj 的内容,它将如下所示

Object {val1: "newValue1", val2: "newValue2", val3: "newValue3"}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 2017-08-25
    • 1970-01-01
    相关资源
    最近更新 更多