javascript - 如何通过对象名称动态检索对象属性?

标签 javascript object

<分区>

我正在使用 WordPress,在 JS 中我有多个这样的实例,我正在将数据从 PHP 传递到 JS

<script type='text/javascript'>
/* <![CDATA[ */
var googlemaps_165 = {"markers":[[....]],"zoom":""};
var googlemaps_169 = {"markers":[[....]],"zoom":""};
/* ]]> */
</script>

在 HTML 中我有这个

<div class="wpmaps wpmaps--165" data-id="googlemaps_165"></div>
<div class="wpmaps wpmaps--169" data-id="googlemaps_169"></div>

在 JS 中,我可以像这样手动处理数据

var markers = googlemaps_165.markers

但是我怎样才能动态地做到这一点呢?

var wpmaps = document.querySelectorAll('.wpmaps');

for (var i = 0; i < wpmaps.length; ++i) {

    // this gives me "googlemaps_165" which is correct
    var dataName = wpmaps[i].getAttribute('data-id');

    // But I can't do this since dataName in this case is only a name, I can't access it this way
    var markers = dataName.markers;

}

最佳答案

全局变量是 window 对象的属性,您可以使用方括号 ([]) 表示法动态访问它们:

var wpmaps = document.querySelectorAll('.wpmaps');

for (var i = 0; i < wpmaps.length; ++i) {

  // this gives me "googlemaps_165" which is correct
  var dataName = wpmaps[i].getAttribute('data-id');

  // But I can't do this since dataName in this case is only a name, I can't access it this way
  var markers = window[dataName].markers;

  console.log(markers);
}
<script type='text/javascript'>
  /* <![CDATA[ */
  var googlemaps_165 = {
    "markers": [
      [1]
    ],
    "zoom": ""
  };
  var googlemaps_169 = {
    "markers": [
      [2]
    ],
    "zoom": ""
  };
  /* ]]> */
</script>
In HTML I have this

<div class="wpmaps wpmaps--165" data-id="googlemaps_165"></div>
<div class="wpmaps wpmaps--169" data-id="googlemaps_169"></div>

您还可以使用 NodeList.forEach()迭代节点而不是 for 循环,并通过元素 dataset 访问 data-id :

document.querySelectorAll('.wpmaps')
  .forEach(function(wpmap) {
    var dataName = wpmap.dataset.id;
    
    var markers = window[dataName].markers;
    
    console.log(markers);
  });
<script type='text/javascript'>
  /* <![CDATA[ */
  var googlemaps_165 = {
    "markers": [
      [1]
    ],
    "zoom": ""
  };
  var googlemaps_169 = {
    "markers": [
      [2]
    ],
    "zoom": ""
  };
  /* ]]> */
</script>
In HTML I have this

<div class="wpmaps wpmaps--165" data-id="googlemaps_165"></div>
<div class="wpmaps wpmaps--169" data-id="googlemaps_169"></div>

关于javascript - 如何通过对象名称动态检索对象属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59594557/

相关文章:

javascript - Accordion 列表文本对齐不起作用

javascript - 如果有条件的背景颜色?

JavaScript 插件,用于查找纯文本中的图像链接并将它们转换为 Angular js 中的 HTML <img>

javascript - 无法访问 javascript 对象内部数组元素的对象属性

java - 为什么没有 java.lang.Array 类?如果java数组是一个Object,它不应该扩展Object吗?

javascript - 如何通过 SystemJs 在 Angular2 中使用时刻时区

javascript - 使用模糊滤镜模糊框阴影会导致 Webkit 浏览器出现奇怪的线条

java - 将数据从 Oracle 存储过程传递到 Java

php 命名空间基准测试

c++ - 尝试将 std::sort() 与自定义对象一起使用