【问题标题】:Join associative arrays in Javascript在 Javascript 中加入关联数组
【发布时间】:2022-02-02 11:30:01
【问题描述】:

我在 Javascript 中有两个(或更多)关联数组:

tagArray['title'] = ('<H1>title</H1>');
tagArray['text'] = ('<P>text</P>');

并想加入他们喜欢:

tagFinal = tagArray.join("<BR>");

但是结果是空的。

结果应该是:tagFinal = '&lt;H1&gt;title&lt;/H1&gt;&lt;BR&gt;&lt;P&gt;text&lt;/P&gt;';

我做错了什么? (我也试过没有标签,没有区别) 还是我最好将push()-ng 放到一个新的数组/字符串中?

【问题讨论】:

  • 由于无法保证对象的属性保持它们被启动时的顺序,因此您应该重新考虑您的代码设计,或许可以找到不同的解决方案。
  • 这是一个巧合,这里的 javascript 允许与 php 相同的语法,这并不意味着它们完全在做同样的事情。 php 中最接近这个的是$obj-&gt;{"title"} = '&lt;H1&gt;title&lt;/H1&gt;';

标签: javascript multidimensional-array


【解决方案1】:

JavaScript 中不存在“关联数组”类型。有对象,也有数组。 Array 原型有一个.join() 方法,但 Object 没有。

(对象通常会做一些类似关联数组的工作,但没有内置模拟实际数组的显式功能。例如,您也无法找到 Object 实例的“长度”。)

你可以写这样一个函数:

function smush( o, sep ) {
  var k, rv = null;
  for (k in o) {
    if (o.hasOwnProperty(k)) {
      if (rv !== null) rv += sep;
      rv += o[k];
    }
  }
  return rv;
}

您是否真的想要将“smush”函数限制为处理对象的直接属性(而不是继承的属性),以及是否想要按类型过滤,这些都是您必须决定的事情为自己。

【讨论】:

    【解决方案2】:

    这段代码应该适合你:

    var tagFinal = "";
    var i = 0;
        
    for (var key in tagArray) {
        if(i == 0){separator = "";}else{separator = "<br>";}
        tagFinal += separator + tagArray[key];
        i++;
    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-09
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多