使用通用/动态属性列表访问子属性

时间:2018-06-11 03:39:05

标签: javascript node.js eval

说我们有这个:

private void checkPaidStatus(){

    paidString = "";


    FirebaseDatabase.getInstance().getReference("Flats").child(flatID).child("Bills").child(itemSelected).child("paidRecord").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            if(dataSnapshot != null){
                Iterator<DataSnapshot> iterable = dataSnapshot.getChildren().iterator();

                //this is the bit that needs to be changed to return properly xd good luck
                for (Iterator<DataSnapshot> it = iterable; it.hasNext();){

                    DataSnapshot dataSnapshot1 = it.next();
                    paidString = paidString + "new" + dataSnapshot1.getValue(String.class);
                    textViewPaidStatus.setText(paidString);

                }

            }

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });


}

这不起作用。我正在进行一些元编程,并寻找一种从对象中读取属性的通用方法。

一种方法是将字符串分成点/句点,如下所示:

const keyv = 'foo.bar.star';

const v = {
  foo: {
    bar: {
      star:'car'
    }
  }
};


console.log(v[keyv]); // undefined

该解决方案的唯一问题是,如果属性名称中包含点/句点,那么我们就会被搞砸。

所以我试图使用const keys = String(keyv).split('.').filter(Boolean); const result = keys.reduce(function (a, b) { return a[b] || ''; }, obj); console.log(result); 来运行属性查找,如下所示:

eval()

但是这只适用于单个属性,如您所见。我需要能够阅读尽可能多的相关属性。

0 个答案:

没有答案