【问题标题】:check the name of an object literal property检查对象文字属性的名称
【发布时间】:2016-01-25 16:17:16
【问题描述】:

我有一个用于创建元素的速记函数,它接受一个标签名称和一个对象字面量。

//create element
function $make(tag, parameters) {
    var o = document.createElement(t);
    if (p.style) o.style.cssText = p.style;
    if (p.class) o.className = p.class;
    if (p.text) o.textContent = p.text;
    return o;
}

你说的很简单:

var e = $make('div', {style: 'float: left', class: 'myClass', text: 'Some Text'});

我想使用属性中的关键字符前缀来设置属性,而不是为每个单独的属性设置检查。例如,如果我想为链接设置href,我可能会调用:

var e = $make('a', {style: 'float: left', text: 'Google', ~href: 'https://www.google.com'});

如何遍历对象文字的属性并检查属性本身的名称(不是值)是否以特定字符或字符串开头?这甚至可能吗?如果没有,您会推荐什么替代方案?

【问题讨论】:

  • 请注意,您的函数只需要一个对象。该对象可能是使用 object literal syntax ({ ... }) 定义的,或者它可能已经以其他方式定义(例如,new Object(),或者它可能是某种类型的 Object) . “字面量”是指对象在代码中的词法指定方式;对象创建后与对象无关。
  • @apsillers 虽然在这种情况下确实如此,但 JS 中的其他文字并不总是如此;示例:("my string" instanceof String === false)

标签: javascript key object-literal


【解决方案1】:

我建议在 Object.keys 函数上使用 forEach 循环,而不是 for...in。这是因为 for ... in 查找原型链 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in#Iterating_over_own_properties_only)。

var obj = {"style": 'float: left', "text": 'Google', "~href": 'https://www.google.com'};
Object.keys(obj).forEach((elm) => {
  console.log("Key=>Value : " + elm + "=>" + obj[elm]);
  if(elm.contains("~")) {
    console.log("Key: " + elm + " contains ~");
  }
});

【讨论】:

  • 谢谢!以及如何调用当前键的值将其分配给对象属性?只是key.value吗?
  • 更新了答案以显示如何访问 forEach 循环内的对象属性。
【解决方案2】:

您可以使用for...in 循环来获取Object 中的每个键,然后检查字符串或字符是否存在。

在下面的示例中,我正在检查键是否以“~”字符开头。

for (const key in myObject) {
    if (key.indexOf('~') === 0) {
        // key contains '~' character
    }
}

您也可以使用正则表达式来匹配字符串,而不是使用indexOf

【讨论】:

    猜你喜欢
    • 2015-08-15
    • 1970-01-01
    • 2013-05-30
    • 2017-01-09
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多