Javascript中来自对象的特定属性

时间:2015-01-29 21:08:48

标签: javascript loops object

让我们说我有这个对象,前两个人购买了房产(用户买了多少)

var Drugs = {
    Extasy : {
        name : "Extasy",
        value: 0,
        bought : 2,
        hist : [],
        qty : 0
    },
    Hash : {
        name : "Hash",
        value: 0,
        hist : [],
        bought: 3,
        qty : 0
    },
    Adrenaline :  {
        name : "Adrenaline",
        value: 0,
        hist : [],
        qty : 0
    },
    Cocaine : {
        name : "Cocaine",
        value: 0,
        hist : [],
        qty : 0
    },
    Mdma : {
        name : "Mdma",
        value: 0,
        hist : [],
        qty : 0
    }
};

我希望循环遍历Drugs对象,以便找出其中哪些已经购买了属性。

var outputs = '<li class="ui-li-has-count">';

for (var d in Drugs) {
    var dd = Drugs[d];

    if (Drugs.hasOwnProperty(dd.bought)) {
        // if (dd.bought != 'undefined' ){
        outputs+='<a  class="ui-btn ui-btn-icon-right ui-icon-carat-r" href="#myPopup" onclick="buyPopup(this.id)" id='+dd.name+'  >'+dd.name+'<span  class="ui-li-count">'+dd.bought+'</span> ';
    }
    else {
        outputs = false;
    }

    outputs += '</li></div>';
}

//getElementById
ast("panel1").innerHTML += outputs;

即使我买的钥匙有财产我也总是假的

2 个答案:

答案 0 :(得分:1)

您不想测试Drugs集合,您想测试单个药物对象。此外,hasOwnProperty确实将属性名称作为字符串,而不是属性值。所以使用

if (dd.hasOwnProperty("bought"))

虽然在你的情况下,像

这样的简单测试
if (dd.bought)

应该足够了,特别是当您想要处理不存在的属性(解析为undefined)时,就像0值一样。

答案 1 :(得分:0)

如果您想找到属性&#34;已购买&#34;,那么您需要在hasOwnProperty()来电中检查该字词。所以改变这一行:

if (Drugs.hasOwnProperty(dd.bought)){

。 。 。对此。 。

if (dd.hasOwnProperty("bought")){

在您的两个测试项目中,您当前正在检查该项目是否具有名为&#34; 2&#34; &#34; 3&#34;分别在&#34; Drugs&#34;对象(因为这是dd.bought在您检查时等于的对象。)

在分配dd之前,您还应该在代码中使用此功能:

if (Drugs.hasOwnProperty(d)){