在javascript中将值从一个字典复制到另一个字典

时间:2017-05-14 11:48:33

标签: javascript dictionary

以下代码段无法将内容从一个字典复制到另一个字典。它抛出一个显示“copy.Add不是函数”的类型错误。有人可以建议将键值对从一个字典复制到另一个字典的方法。

    dict = {"Name":"xyz", "3": "39"};
    var copy={};
    console.log(dict);
    for(var key in dict)
    {
    copy.Add(key, dict[key]);
    }
    console.log(copy);

4 个答案:

答案 0 :(得分:2)

您无需在add - 变量`上调用copy。您可以按如下方式直接使用索引器:

dict = {"Name":"xyz", "3": "39"};
var copy = {};
console.log(dict);
for(var key in dict)
{
    copy[key] = dict[key];
}
console.log(copy);

答案 1 :(得分:1)

在Javascript中,使用Object.assign(copy, dict)将内容复制到另一个现有字典中(即“就地”副本):

dict = {"Name":"xyz", "3": "39"};
var copy={};
console.log(dict, copy);
Object.assign(copy, dict);
console.log(dict, copy);

在较新的JavaScript版本中,您还可以使用...运算符将字典克隆到一个新字典中(此方法将创建一个新实例):

var copy = {...dict};

其他:您还可以使用此语法将两个字典合并(合并)。就地:

Object.assign(copy, dict1, dict2);

或通过创建新实例:

var copy = {...dict1, ...dict2};

答案 2 :(得分:0)

您的代码不是C#代码,正确的方法是,

Dictionary<string, string> dictionary1 =  new Dictionary<string, string>();
Dictionary<string, string> dictionary2 = new Dictionary<string, string>();
dictionary1.Add("Name", "xyz");
dictionary1.Add("3", "39");
foreach(KeyValuePair<string,string> val in dictionary1)
{
  dictionary2.Add(val.Key, val.Value);
}

<强> WORKING FIDDLE

答案 3 :(得分:0)

这应该为你做

using System;
using System.Linq;
using System.Collections.Generic;


namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            Dictionary<string, string> dic = new Dictionary<string, string>() { {"Name", "xyz" }, {"3", "39"}};
            Dictionary<string, string> copy = new Dictionary<string, string>();
            dic.Copy(copy);
            copy.ToList().ForEach(c => Console.Write("\n" + c));
            Console.ReadLine();
        }
    }

    public static class Ext
    {
        public static void Copy(this Dictionary<string, string> dic, Dictionary<string, string> other)
        {
            dic.ToList().ForEach(d => other.Add(d.Key, d.Value));
        } 
    }
}

我确定在

之前已经回答了这个问题