如何检查对象是否在JavaScript中具有属性?
考虑:
x = {'key': 1};
if ( x.hasOwnProperty('key') ) {
//Do this
}
Run Code Online (Sandbox Code Playgroud)
这是最好的方法吗?
我有一个大对象,我想转换为JSON并发送.但它具有圆形结构.我想抛出任何存在的循环引用并发送任何可以进行字符串化的内容.我怎么做?
谢谢.
var obj = {
a: "foo",
b: obj
}
Run Code Online (Sandbox Code Playgroud)
我想将obj字符串化为:
{"a":"foo"}
Run Code Online (Sandbox Code Playgroud) 我有一个包含循环引用的JavaScript对象定义:它有一个引用父对象的属性.
它还具有我不想传递给服务器的功能.我如何序列化和反序列化这些对象?
我读过这样做的最好方法是使用Douglas Crockford的stringify.但是,我在Chrome中收到以下错误:
TypeError:将循环结构转换为JSON
代码:
function finger(xid, xparent){
this.id = xid;
this.xparent;
//other attributes
}
function arm(xid, xparent){
this.id = xid;
this.parent = xparent;
this.fingers = [];
//other attributes
this.moveArm = function() {
//moveArm function details - not included in this testcase
alert("moveArm Executed");
}
}
function person(xid, xparent, xname){
this.id = xid;
this.parent = xparent;
this.name = xname
this.arms = []
this.createArms = function () {
this.arms[this.arms.length] = new arm(this.id, this);
}
}
function group(xid, xparent){
this.id = …
Run Code Online (Sandbox Code Playgroud) 我有一个巨大的收藏品,我正在寻找集合内某处的钥匙.获取包含该键/索引的所有对象的引用列表或完整路径的可靠方法是什么?我使用jQuery和lodash,如果它有帮助,你可以忘记无限指针递归,这是一个纯JSON响应.
fn({ 'a': 1, 'b': 2, 'c': {'d':{'e':7}}}, "d");
// [o.c]
fn({ 'a': 1, 'b': 2, 'c': {'d':{'e':7}}}, "e");
// [o.c.d]
fn({ 'aa': 1, 'bb': 2, 'cc': {'d':{'x':9}}, dd:{'d':{'y':9}}}, 'd');
// [o.cc,o.cc.dd]
Run Code Online (Sandbox Code Playgroud)
fwiw lodash有一个_.find函数,可以找到两个嵌套深度的嵌套对象,但之后似乎失败了.(例如http://codepen.io/anon/pen/bnqyh)
我有两个数组:newParamArr[i]
和paramVal[i]
.
newParamArr[i]
数组中的示例值:
["Name", "Age", "Email"]
paramVal[i]
数组中的示例值:
["Jon", "15", "jon@gmail.com"]
我需要创建一个JavaScript对象,将数组中的所有项放在同一个对象中.例如
{newParamArr[0]:paramVal[0], newParamArr[1]:paramVal[1], ...}
两个数组的长度始终相同,但数组的长度可以增加或减少.如...
newParamArr.length === paramVal.length
将永远返回true.
以下帖子都没有帮助回答我的问题:
我正在构建一个实用程序函数,它应该搜索属性名称并在找到它后返回其值.它应该递归地执行此操作:
// Function
util.findVal = (object, propName) => {
for (let key in object) {
if (key === propName) {
console.log(propName)
console.log(object[key])
return object[key]
} else {
util.findVal(object[key], propName)
}
}
}
// Input
object: {
photo: {
progress: 20
}
}
// Usage
util.findVal(object, 'progress')
Run Code Online (Sandbox Code Playgroud)
然而,控制台日志永远存在,浏览器崩溃.我究竟做错了什么?
编辑:
这就是我调用函数的方式:
// Input
item: {
photo: {
file: {},
progress: 20
}
}
this.findProgress(item)
methods: {
findProgress (item) {
return util.findVal(item, this.propName)
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个有趣的任务.我解决了一半,但无法找到解决其余问题的解决方案.希望有人能指出我正确的方向.
我发现解决方案接近我的任务.但我的略有不同,使用ES6.
有嵌套对象.
let someList = {
value: 1,
next: {
value: 2,
next: {
value: 3,
next: {
value: 4,
next: null
}
}
}
};
Run Code Online (Sandbox Code Playgroud)
我收到了所有价值观.
function reversePrint(linkedList) {
Object.keys(linkedList).map(key => {
let myKey = linkedList[key];
typeof myKey == "object" ? console.log(reversePrint(myKey)) : console.log(myKey);
});
}
reversePrint(someList);
Run Code Online (Sandbox Code Playgroud)
但问题是:我如何以相反的顺序获得所有值?
小提琴:https://jsfiddle.net/L83puqbz/17/
我尝试使用reduce来生成数组并反转它,但每个值都在单独的数组中.
小提琴https://jsfiddle.net/L83puqbz/20/
任何帮助都将受到极大的关注.
我有一个像这样的 javascript 普通对象:{a: {b: 1} }
并且我想将其转换为像这样的点符号字符串a.b = 1
用例:
将对象发送到纯文本环境(例如 cli)或作为 url 参数。