javascript - 从 2 个数组创建新的多维关联数组

标签 javascript multidimensional-array associative-array porting

我正在寻找一种在 JavaScript 中创建单个多维关联数组的解决方案。

我所拥有的:我有一个使用 php 访问的 mysql 数据库,并且有一个包含单个记录中所有字段(键、值对)的数组。每条记录中有超过 30 个字段,因此我正在寻找动态解决方案。 在html编码中,有一个表单,用于更新表中的特定记录。我在每个输入上使用函数调用来按键和值填充 JavaScript 数组。这些键与 php 数组中的键相同。 在函数中,我对 php 数组执行 json_encode 调用,以提取“旧”数据,使其可供 JavaScript 访问。

什么有效:我能够根据来自输入函数调用的新数据创建动态 JavaScript 关联数组。我在每次调用该函数后都使用警报对此进行了测试。

我需要什么:一种将 javascript 数组更改为多维数组的方法,拉入旧值并将其添加到与原始键绑定(bind)的新数组中。

这有效:

var changes={}; 
function change(key,value) {
  changes[key[value]]=value;
  for (key in changes) {
    alert('key: '+key+'...  value: '+changes[key]);
  }
}

这符合我正在寻找的内容:

var changes={}; 
function change(key,value) {
  var oldInfo = eval(<? echo json_encode($oldInfo); ?>); //this from the php array  
  changes[key[newValue]]=value; 
  changes[key[oldValue]]=oldInfo[key];
  for (key in changes) {
    alert('key: '+key+'...  value: '+changes[key[newValue]]);
  }
}

有人能指出我正确的方向吗?

澄清一下:

我的php数组$oldInfo保存表中的旧信息,例如:

{fName=>"charles",lName=>"madison", etc.}

JavaScript 数组保存新信息:

{fName=>"Charlie",lName=>"Madison", etc.}

我想要一个新的多维数组 (PHP)(或 JavaScript 中的对象),如下所示:

{fName=>{"charles","Charlie"}, lName=>{"madison","Madison"}, etc.}

lName 和 fName 将是与 PHP 数组和 JavaScript 对象同义的关键字段。

最佳答案

确实不清楚你想要什么,但你的逻辑存在一些严重缺陷:

  1. var changes={}; ///this one way of declaring array in javascript

    不,不是。这是一个对象,与数组有很大不同。

  2. eval(<? echo json_encode($oldInfo); ?>);

    您不需要eval这里。 json_encode的输出是 JSON,它是 JavaScript 的一个子集,可以简单地执行。

  3. changes[key[value]]=value;

    这是完全错误的,而且仍然是一维数组。假设key是一个数组,您所做的就是将键/值反转到一个新数组中。如果 key 之前看起来像这样...

    'a' => 1
    'b' => 2
    'c' => 3
    

    ...然后changes之后将如下所示:

    1 => 'a'
    2 => 'b'
    3 => 'c'
    

    对于多维数组,您需要两个键。你会写类似 changes[key1][key2] = value .

  4. 您的变量命名错误。您应该永远看到这样的行:key[value] 。那是倒退了。 位于 [] 之间,位于 = 的另一侧。它应该是这样的 array[key] = value .

回复:您的澄清:

这不起作用:{fName=>{"charles","Charlie"},...} 。你混淆了数组和对象;数组使用方括号和隐式数字键(例如 ["charles", "Charlie"]),而对象可以像关联数组一样处理 {key1: "value1", key2: "value2"}语法。

您需要一个数组,其中每个键都是属性的名称,每个值都是包含旧值和新值的数组。

认为您想要的实际上非常简单,假设您传递给函数的“值”是值。

var changes = {};
var oldInfo = <?= json_encode($oldInfo) ?>;

function change(key, value) {
  changes[key] = [ oldInfo[key], value ]  
}

关于javascript - 从 2 个数组创建新的多维关联数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15418863/

相关文章:

javascript - 无法读取未定义的属性 'username' - JavaScript

PHP从多维数组中删除重复值并完全唯一

PHP:获取关联数组的第 n 个项目

ruby - 如何在 ruby​​ 中打印多维数组?

php - 我将哪种 fetch_style 与 PDO 一起使用,以便我可以使用 PHP extract() 函数?

bash 在循环中填充一个数组

javascript - 了解 momentjs 中 + 运算符的类型转换

javascript - axios拦截器拦截所有axios请求

javascript - Javascript 上的 Netcat

javascript - 使用键值遍历javascript多维数组