我通常使用此模式迭代对象属性:
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对象的属性.首先,假设我有以下对象:
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) 我知道可以使用变量作为名称来访问对象属性/方法
例:
$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文档明确指出你不能指向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类的构造函数,并将该对象设置为可由类中其余函数使用的全局变量?
例如:
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)
当我尝试这样做时,我得到一个"对非对象的成员函数调用"错误.反正有没有这样做?否则,我必须直接将对象传递给每个单独的函数.
谢谢!
当我尝试使用未声明的变量时,我得到ReferenceError:
console.log(a); // Uncaught ReferenceError: a is not defined\nRun Code Online (Sandbox Code Playgroud)\n我可以先使用一个变量,然后再定义它,这样 \xe2\x80\x99 就不会因为提升而成为问题。
\nconsole.log(a); // undefined\n\nvar a;\nRun Code Online (Sandbox Code Playgroud)\n但是当我声明一个对象时,为什么执行上下文允许我使用它的任何属性?
\nvar obj = {};\n\nconsole.log(obj.a); // undefined\nconsole.log(obj.why); // undefined\nRun Code Online (Sandbox Code Playgroud)\n为什么这些是允许的,并且a从未why在任何地方声明过?
以此课程为例:
<?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)
是否可以停止添加动态属性?是否有可能获得类定义属性的列表?(即不是动态的,运行时添加的属性)
如何列出与Jena中的实例关联的所有对象属性?
例如:Person有一个名为" hasVehicle " 的Object属性,它与类Vehicle相关联
我收集的文档的结构是这样的。
{
"_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进行处理。
对象具有其他差异,但这对于此功能并不重要。
我想对两种不同类型的对象使用相同的功能。这是演示我的问题的示例代码:
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;为错误(“类型上不存在属性”),因为两种类型都不具有两种属性。
那么,什么是正确的打字稿方式呢?
我的 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) 这个问题在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 …
在 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)
当数组属性(即set1和set2)发生更改时,我希望能够对这些更改做出反应。
例如,我可能会在代码中执行以下操作:
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
javascript ×6
php ×4
object ×3
variables ×2
asp.net-mvc ×1
c# ×1
filter ×1
for-in-loop ×1
if-statement ×1
jena ×1
jquery ×1
json ×1
list ×1
loops ×1
mongodb ×1
node.js ×1
oop ×1
scope ×1
syntax ×1
typescript ×1
vue.js ×1