我有一个扁平的JS对象:
{a: 1, b: 2, c: 3, ..., z:26}
Run Code Online (Sandbox Code Playgroud)
我想克隆除一个元素之外的对象:
{a: 1, c: 3, ..., z:26}
Run Code Online (Sandbox Code Playgroud)
最简单的方法是什么(如果可能,最好使用es6/7)?
如果我理解正确,ECMAScript 5有类型的filter()原型Array,但不是Object类型.
我如何在JavaScript中实现filter()for Object?
假设我有这个对象:
var foo = {
bar: "Yes"
};
Run Code Online (Sandbox Code Playgroud)
我想写一个filter()适用于Objects的:
Object.prototype.filter = function(predicate) {
var result = {};
for (key in this) {
if (this.hasOwnProperty(key) && !predicate(this[key])) {
result[key] = this[key];
}
}
return result;
};
Run Code Online (Sandbox Code Playgroud)
这在我在下面的演示中使用时有效,但是当我将它添加到使用jQuery 1.5和jQuery UI 1.8.9的网站时,我在FireBug中遇到了JavaScript错误.
Object.prototype.filter = function(predicate) {
var result = {};
for (key in this) {
if (this.hasOwnProperty(key) && !predicate(this[key])) {
console.log("copying");
result[key] = this[key];
}
} …Run Code Online (Sandbox Code Playgroud)var obj = {
a: "A",
b: "B",
c: "C"
}
console.log(obj.a); // return string : A
Run Code Online (Sandbox Code Playgroud)
但我希望通过这样的变量
var name = "a";
console.log(obj.name) // but return undefined
Run Code Online (Sandbox Code Playgroud)
这该怎么做?
在这篇文章中,Nick Craver提供了一个答案:
function(_, id)
Run Code Online (Sandbox Code Playgroud)
在使用它之前,此代码不会将下划线声明为变量.我在谷歌和此处的搜索仅指向使用下划线作为前缀的引用,而不是作为变量本身.它有什么作用?我喜欢Nick的解决方案,但这让我感到烦恼.
这是我的对象(确保它是一个 typeof 对象):
{
"1": {"user_id":1,"test":"","user_name":"potato0","isok":"true"},
"2":{"user_id":2,"test":"","user_name":"potato1","isok":" true"},
"3":{"user_id":3,"test":"","user_name":"potato2","isok":" true"},
"4":{"user_id":4,"test":"","user_name":"potato3","isok":"locationd"}
}
Run Code Online (Sandbox Code Playgroud)
为什么使用.filter对我不起作用?
是因为我的变量是typeof object并且该方法仅适用于数组吗?
this.activeUsers = window.users.filter( function(user) {
// return ( (user.test === '0') && (user.isok === '0') );
return user.user_id === 1;
});
Run Code Online (Sandbox Code Playgroud)
得到错误:
.filter 不是函数
建议的对象替代方案是什么?
从具有特定属性(而不是全部)的另一个对象克隆一个对象的优化方法是什么?
如下所示,我们可以通过对象的投影来获取值:
let tempObject = {
prop1 : 'something',
prop2 : 'something' ,
other : 'others'
};
//then
let { prop1, prop2} = tempObject;
Run Code Online (Sandbox Code Playgroud)
同样,我想从另一个对象克隆一些属性,例如
let oldObject = {
p1 : 'something',
p2 : 'somethig',
p3 : 'something'
}
Run Code Online (Sandbox Code Playgroud)
想要从上面制作另一个oldObject仅具有p1 and p2这两个属性的对象。预计newObject将会{p1 : 'something', p2 : 'somethig'}。
我知道有很多方法可以做到这一点,但我想通过解释了解优化方法。
例如,我有这个对象:
const payload = {
apple: 1,
dog: 2,
cat: 3
}
Run Code Online (Sandbox Code Playgroud)
我想将它解构为一个只包含apple和的新对象dog:
const newPayload = {
apple:1,
dog: 2
}
Run Code Online (Sandbox Code Playgroud)
就像是:
const {{apple, dog} : newPayload} = payload
Run Code Online (Sandbox Code Playgroud)
显然以上是错误的,但想知道是否有办法做这样的事情.
谢谢!
所以我想过滤对象的对象,并打印除我通过键指定的一个之外的所有对象。
const obj = {1: {age: 10}, 2: {age: 20}};
console.log(obj);Run Code Online (Sandbox Code Playgroud)
所以我必须有选择以某种方式指定我不希望打印 obj[1] 。我怎么做?: |
我正在尝试从 JSON 数组中选择某些键,然后过滤其余的键。
var json = JSON.stringify(body);
Run Code Online (Sandbox Code Playgroud)
这是:
{
"FirstName":"foo",
"typeform_form_submits":{
"foo":true,
"bar":true,
"baz":true
},
"more keys": "foo",
"unwanted key": "foo"
}
Run Code Online (Sandbox Code Playgroud)
想要我想要:
{
"FirstName":"foo",
"typeform_form_submits":{
"foo":true,
"bar":true,
"baz":true
}
}
Run Code Online (Sandbox Code Playgroud)
我已经查看了如何在node.js中过滤JSON数据?,但我希望在没有任何软件包的情况下做到这一点。
javascript ×8
ecmascript-6 ×3
object ×2
clone ×1
ecmascript-7 ×1
filter ×1
filtering ×1
jquery ×1
json ×1
node.js ×1
reactjs ×1