标签: object-properties

是一个if继续一个好的模式,以防止在Javascript中迭代属性时过度嵌套?

我通常使用此模式迭代对象属性:

for(var property in object) {
   if(object.hasOwnProperty(property)) {
      ...
   }
}
Run Code Online (Sandbox Code Playgroud)

我不喜欢这种过度的缩进,最近有人向我指出我可以通过这样做摆脱它:

for(var property in object) {
   if(!object.hasOwnProperty(property)) {
      continue;
   }

   ...
}
Run Code Online (Sandbox Code Playgroud)

我喜欢这个,因为它没有引入额外的缩进级别.这种模式是否正常,还是有更好的方法?

javascript loops object object-properties for-in-loop

5
推荐指数
1
解决办法
478
查看次数

对象属性动态删除

我很好奇一种改进的方法来动态删除基于通配符的javascript对象的属性.首先,假设我有以下对象:

object =
{
    checkbox_description_1 : 'Chatoyant',
    checkbox_description_2 : 'Desultory',
    random_property : 'Firefly is a great program',
    checkbox_mood_1 : 'Efflorescent',
    checkbox_description_3 : 'Ephemeral'
}
Run Code Online (Sandbox Code Playgroud)

任务

现在,最终结果是以'checkbox_description'为幌子删除了所有属性,并保留对象的其余部分,如下所示:

object =
{
    random_property : 'Firefly is a great program',
    checkbox_mood_1 : 'Efflorescent',
}
Run Code Online (Sandbox Code Playgroud)

我的解决方案

目前我的解决方案涉及jquery和以下代码:

var strKeyToDelete = 'checkbox_description'

/* Start looping through the object */
$.each(object, function(strKey, strValue) {

    /* Check if the key starts with the wildcard key to delete */
    if(this.match("^"+strKey) == strKeyToDelete) {

        /* Kill... */
        delete object[strKey];
    }; …
Run Code Online (Sandbox Code Playgroud)

javascript jquery object-properties

5
推荐指数
2
解决办法
6394
查看次数

通过变量名访问静态对象属性

我知道可以使用变量作为名称来访问对象属性/方法

例:

$propName = 'something';
$something = $object->$propName;
Run Code Online (Sandbox Code Playgroud)

是否可以执行相同的w /常量或静态属性?

我试过了:

$ constName ='MY_CONST';

MyCLass::{$constName};
Run Code Online (Sandbox Code Playgroud)

$obj::{$constName};
Run Code Online (Sandbox Code Playgroud)

但似乎没有任何工作,我无法在任何地方找到它.

php variables object object-properties

4
推荐指数
1
解决办法
891
查看次数

指向数组或嵌套对象的变量变量

是否可以创建指向数组或嵌套对象的变量变量?php文档明确指出你不能指向SuperGlobals,但它不清楚(至少对我来说)这是否适用于一般的数组.

这是我对数组var var的尝试.

     // Array Example
     $arrayTest = array('value0', 'value1');
     ${arrayVarTest} = 'arrayTest[1]';
     // This returns the correct 'value1'
     echo $arrayTest[1];
     // This returns null
     echo ${$arrayVarTest};   
Run Code Online (Sandbox Code Playgroud)

这是一些简单的代码,用于显示对象var var的含义.

     ${OBJVarVar} = 'classObj->obj'; 
     // This should return the values of $classObj->obj but it will return null  
     var_dump(${$OBJVarVar});    
Run Code Online (Sandbox Code Playgroud)

我错过了一些明显的东西吗?

php variable-variables object-properties

3
推荐指数
1
解决办法
4166
查看次数

将对象传递给PHP构造函数错误

是否可以将对象传递给PHP类的构造函数,并将该对象设置为可由类中其余函数使用的全局变量?

例如:

class test {

   function __construct($arg1, $arg2, $arg3) {
      global $DB, $ode, $sel;

      $DB = arg1;
      $ode = arg2;
      $sel = $arg3;
   }

   function query(){
      $DB->query(...);
   }

}
Run Code Online (Sandbox Code Playgroud)

当我尝试这样做时,我得到一个"对非对象的成员函数调用"错误.反正有没有这样做?否则,我必须直接将对象传递给每个单独的函数.

谢谢!

php syntax scope object-properties

3
推荐指数
1
解决办法
3680
查看次数

为什么访问不存在的对象属性会导致“未定义”而不是抛出“ReferenceError”?

当我尝试使用未声明的变量时,我得到ReferenceError

\n
console.log(a); // Uncaught ReferenceError: a is not defined\n
Run Code Online (Sandbox Code Playgroud)\n

我可以先使用一个变量,然后再定义它,这样 \xe2\x80\x99 就不会因为提升而成为问题。

\n
console.log(a); // undefined\n\nvar a;\n
Run Code Online (Sandbox Code Playgroud)\n

但是当我声明一个对象时,为什么执行上下文允许我使用它的任何属性?

\n
var obj = {};\n\nconsole.log(obj.a); // undefined\nconsole.log(obj.why); // undefined\n
Run Code Online (Sandbox Code Playgroud)\n

为什么这些是允许的,并且a从未why在任何地方声明过?

\n

javascript variables object-properties

3
推荐指数
1
解决办法
736
查看次数

我可以创建一个在运行时无法动态添加属性的PHP类吗?

以此课程为例:

<?php

class Person
{
    private $name = null;
    private $dob = null;

    public function __construct($name, $dob)
    {
        $this->name = $name;
        $this->dob = $dob;
    }
}

$potts = new Person('Matt', '01/01/1987');
var_dump($potts);

$potts->job = 'Software Developer'; // new dynamic property
var_dump($potts);

var_dump(get_object_vars($potts));
Run Code Online (Sandbox Code Playgroud)

输出如下:

object(Person)#1 (2) {
  ["name":"Person":private]=>
  string(4) "Matt"
  ["dob":"Person":private]=>
  string(10) "01/01/1987"
}

object(Person)#1 (3) {
  ["name":"Person":private]=>
  string(4) "Matt"
  ["dob":"Person":private]=>
  string(10) "01/01/1987"
  ["job"]=>
  string(18) "Software Developer"
}

array(1) {
  ["job"]=>
  string(18) "Software Developer"
}
Run Code Online (Sandbox Code Playgroud)

是否可以停止添加动态属性?是否有可能获得类定义属性的列表?(即不是动态的,运行时添加的属性)

php oop object-properties

2
推荐指数
1
解决办法
131
查看次数

列出Jena中实例的对象属性

如何列出与Jena中的实例关联的所有对象属性?

例如:Person有一个名为" hasVehicle " 的Object属性,它与类Vehicle相关联

list jena object-properties object-property

2
推荐指数
1
解决办法
7758
查看次数

如何通过 MongoDB 驱动程序 (node.js) 向对象添加属性(属性名称是可变的)

我收集的文档的结构是这样的。

{ 
"_id" : ObjectId("54e74de2950fd3a4e5f0a37a"),
"userName": "Any_user",
"ratings": {
   "rating1" : [ ],
   "big_rating" : [ ] 
  }
}
Run Code Online (Sandbox Code Playgroud)

在 MongoDB 客户端 (mongo.exe) 中,我需要的添加看起来像这样

db.userContent.update({userName: "NXTaar"}, {$set: {"ratings.variable_name": []}})
Run Code Online (Sandbox Code Playgroud)

我需要 MongoDB node.js 驱动程序的函数是的,我知道“属性名称作为字符串”的事情,我可以将变量传递给属性名称。这是我试图做的:

var rating = {};
var title = 'some_string';
ratings[title] = [];

usercontent.update({userName: "some_user"}, {$set: ratings}, function (err, doc) {...})
Run Code Online (Sandbox Code Playgroud)

这一行向文档添加了一个名为 property 的新对象

usercontent.update({userName: "some_user"}, {$set: {ratings: ratings}}, function (err, doc) {...})
Run Code Online (Sandbox Code Playgroud)

而这个正是我所需要的,但每次运行时,它都会用一个新的属性重写当前属性(是的,我知道,这是因为 $set 参数用你传递给它的东西改变了选定的对象)

我需要一个函数,它向对象添加一个属性,并通过变量给定名称

javascript mongodb node.js object-properties

2
推荐指数
1
解决办法
2041
查看次数

在打字稿联合类型中访问不同的属性

我正在创建一个函数来处理数据库中的对象。我有两个不同的数据结构,其中相同的属性具有不同的名称。我无法更改它,因此必须使用JavaScript进行处理。
对象具有其他差异,但这对于此功能并不重要。
我想对两种不同类型的对象使用相同的功能。这是演示我的问题的示例代码:

interface TypeA {
    itemName: string;
}

interface TypeB {
    itemTitle: string;
}

function getItemName(item: TypeA | TypeB): string {
    let name = '';

    if (item.hasOwnProperty('itemName')) {
        name = item.itemName;
    } else {
        name = item.itemTitle;
    }

    return name;
}
Run Code Online (Sandbox Code Playgroud)

当然,此代码将运行。但是IDE会将行name = item.itemName;和行都标记name = item.itemTitle;为错误(“类型上不存在属性”),因为两种类型都不具有两种属性。

那么,什么是正确的打字稿方式呢?

if-statement object-properties typescript

2
推荐指数
3
解决办法
836
查看次数

对象属性未更新

我的 MVC5 项目视图对 api/movies 进行 api 调用,其中存在以下逻辑:

(首先,这是 movieDto 的实例化方式):

var moviesQuery = _context.Movies.Include(m => m.Genre);
var moviesDto = moviesQuery.ToList()
            .Select(Mapper.Map<Movie, MovieDto>);
Run Code Online (Sandbox Code Playgroud)

逻辑如下:

//for regular API call add N/A to items that are not available
    foreach (MovieDto movie in moviesDto)
    {
        if (movie.NumberAvailable == 0)
                movie.Name = movie.Name + " N/A. :(";
    }
    return Ok(moviesDto);
Run Code Online (Sandbox Code Playgroud)

我在运行时在调试模式下的 Foreach 循环中检查电影对象,确实发现某些电影的 name 属性附加了“N​​/A :(”。但在视图中,只有电影的 (原始)名称出现。

编辑:在返回给调用者之前检查上面最后一行的 movieDto 时,我发现相关电影的名称尚未更新。

FWIW,这是 movieDto 类定义:

public class MovieDto
    {
        public int Id { get; set; }

        [Required] …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc object-properties

2
推荐指数
1
解决办法
3051
查看次数

如何有效地过滤对象中的对象?

这个问题在SO中已经提出过很多次了,但是都是指对象数组

就我而言,我想过滤对象的对象

假设我有这个对象:

"Users": {
  "w14FKo72BieZwbxwUouTpN7UQm02": {
    "name": "Naseebullah Ahmadi",
    "userType": "Patient",
    "writePermission": false
  },
  "SXMrXfBvexQUXfnVg5WWVwsKjpD2": {
    "name": "Levi Yeager",
    "userType": "Patient",
    "writePermission": false
  },
  "VoxHFgUEIwRFWg7JTKNXSSoFoMV2": {
    "name": "Ernest Kamavuako",
    "userType": "Doctor",
    "writePermission": true
  },
  "hFoWuyxv6Vbt8sEKA87T0720tXV2": {
    "name": "Karla Stanlee",
    "userType": "Doctor",
    "writePermission": true
  }
}
Run Code Online (Sandbox Code Playgroud)

我想过滤这个,这样我就可以得到以下内容:

"UsersCustom": {
  "w14FKo72BieZwbxwUouTpN7UQm02": {
    "name": "Naseebullah Ahmadi",
    "userType": "Patient",
    "writePermission": false
  },
  "SXMrXfBvexQUXfnVg5WWVwsKjpD2": {
    "name": "Levi Yeager",
    "userType": "Patient",
    "writePermission": false
  }
}
Run Code Online (Sandbox Code Playgroud)

这样做有什么意义呢?

请注意,这个对象“User”实际上非常庞大(超过 1000 个条目),并且每个用户拥有的属性不仅仅是“name”、“userType”和“writePermission”。

我需要过滤用户对象的原因是这样我可以获得只有(Patient …

javascript json object filter object-properties

2
推荐指数
1
解决办法
3680
查看次数

如何让 Vue.js 对动态添加的数组属性的更改做出反应?

在 Vue.js 中,我有一个数据对象,它具有动态添加/编辑的属性,这些属性本身就是数组。例如,该属性的开头如下:

data: function () {
    return {
        vals: {}
    };
}
Run Code Online (Sandbox Code Playgroud)

随着时间的推移,通过各种按钮点击等,vals可能如下所示(实际属性名称和值基于多种因素 100% 动态):

vals: {
    set1: [
        {
            prop1: 123,
            prop2: 'hello'
        },
        {
            prop1: 456,
            prop2: 'bye'
        }
    ],
    set2: [
        {
            prop3: 'Why?!',
            prop4: false
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

当数组属性(即set1set2)发生更改时,我希望能够对这些更改做出反应。

例如,我可能会在代码中执行以下操作:

var prop = 'set1';

this.vals[prop].push({
    {
        prop1: 789,
        prop2: 'hmmm...'
    }
});
Run Code Online (Sandbox Code Playgroud)

然而,当我这样做时,组件没有更新(我猜是因为我将一个对象推到对象子数组的末尾;而 Vue.js 似乎没有跟踪这些更改)。

我已经能够通过执行this.$forceUpdate();上述操作来强制组件做出反应push,但我想当涉及到被推到对象子数组末尾的对象时,必须有一种更雄辩的方式让 Vue.js 做出反应。

有谁知道更好的方法来尝试实现我想要实现的目标?谢谢。

javascript object-properties vue.js vue-component vue-reactivity

2
推荐指数
1
解决办法
3856
查看次数