GVKun编程网logo

javascript – Lodash查找数组中是否存在对象属性(js查找数组中是否包含某个对象)

18

在这里,我们将给大家分享关于javascript–Lodash查找数组中是否存在对象属性的知识,让您更了解js查找数组中是否包含某个对象的本质,同时也会涉及到如何更有效地javascript–使用lo

在这里,我们将给大家分享关于javascript – Lodash查找数组中是否存在对象属性的知识,让您更了解js查找数组中是否包含某个对象的本质,同时也会涉及到如何更有效地javascript – 使用lodash按键对数组中的对象进行排序、javascript – 使用ramda更改数组中的对象属性、javascript – 修改对象数组中的对象属性、javascript – 在对象属性名称中使用变量的内容。

本文目录一览:

javascript – Lodash查找数组中是否存在对象属性(js查找数组中是否包含某个对象)

javascript – Lodash查找数组中是否存在对象属性(js查找数组中是否包含某个对象)

我有一个这样的对象数组:
[ {"name": "apple","id": "apple_0"},{"name": "dog","id": "dog_1"},{"name": "cat","id": "cat_2"}
]

我想插入另一个名为apple的元素,但是,因为我不想在那里复制,我如何使用lodash来查看数组中是否有一个具有相同名称的对象?

解决方法

你可以像这样使用Lodash _.find().
var data = [ {"name": "apple","id": "cat_2"}
]

if(!_.find(data,{name: 'apple'})) {
  data.push({name: 'apple2'});
}
console.log(data)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>

javascript – 使用lodash按键对数组中的对象进行排序

javascript – 使用lodash按键对数组中的对象进行排序

嗨Stack Overflow社区!

我有以下测试数组:

let test = [{
    "searchQuery": "test","resultsLoaded": -1,"offset": -1,"allResults": 10
},{
    "MetaData": {
        "type": "page-content","image": true,"name": "lorem-ipsum","rank": 10,"tags": ["website:lorem/ipsum"]
    },"componentData": {
        "header": "Lorem Ipsum","path": "/content/asdf","breadcrumbDouble": {
            "breadcrumbItem1": {
                "href": "lorem ipsum","text": "lorem ipsum"
            },"breadcrumbItem2": {
                "href": "/content/asdf","text": "Lorem Ipsum"
            }
        },"content": {
            "subheadline": "Lorem Ipsum","img": {
                "alt": "","imgSrc": "/content/dam/production/images/asdf.jpeg.imgTransformer/listPageItem/desktop/1511962617778/asdf.jpg"
            },"tags": [{
                "category": "lorem","value": "ipsum"
            }]
        }
    }
},"rank": 50,"rank": 30,"value": "ipsum"
            }]
        }
    }
}];

我现在想要的是按MetaData.rank从最高到最低排序对象.

我想像这样使用lodash的orderBy():

let result = orderBy(test,function(e) {
    let array = parseInt(e.MetaData.rank);
    return array;
},['desc']);

但是我收到以下错误:

TypeError: Cannot read property ‘rank’ of undefined

我的orderBy函数中的console.log(e)显示了这个:

{
    searchQuery: 'test',resultsLoaded: -1,offset: -1,allResults: 10
}

有任何快速建议来解决这个问题

我知道第一个对象是因为结构不同而导致问题.所以我需要解决它!

解决方法

您可以将没有MetaData属性的项目移动到顶部,并按排名对其余项目进行排序.

var array = [{ searchQuery: "test",allResults: 10 },{ MetaData: { type: "page-content",image: true,name: "lorem-ipsum",rank: 10,tags: ["website:lorem/ipsum"] },componentData: { header: "Lorem Ipsum",path: "/content/asdf",breadcrumbDouble: { breadcrumbItem1: { href: "lorem ipsum",text: "lorem ipsum" },breadcrumbItem2: { href: "/content/asdf",text: "Lorem Ipsum" } },content: { subheadline: "Lorem Ipsum",img: { alt: "",imgSrc: "/content/dam/production/images/asdf.jpeg.imgTransformer/listPageItem/desktop/1511962617778/asdf.jpg" },tags: [{ category: "lorem",value: "ipsum" }] } } },rank: 50,rank: 30,value: "ipsum" }] } } }];

array.sort(function (a,b) {
    return ('MetaData' in a) - ('MetaData' in b) || b.MetaData.rank - a.MetaData.rank;
});

console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }

javascript – 使用ramda更改数组中的对象属性

javascript – 使用ramda更改数组中的对象属性

我有一个像下面的对象数组:

[{name:'name',key:'21',good: 'true'},{name: 'another name',key:'22',good:'false'},...]

现在我想对这个数组中的一个对象进行更改.我的第一次尝试是这样的:

const s = R.compose(
  R.assoc('good',checked),R.propEq('key',name),R.map(),);

但这个代码resualt是我想要的对象,只有它是’好’属性.我希望通过这种改变得到整个阵列.

解决方法

我会做这样的事情:

const alter = curry((checked,key,items) => map(
  when(propEq('key',key),assoc('good',checked)),items
))

alter('true','22',items)

这样做的好处是不包含任何自由变量(例如原始中的checked和name.)如果您不需要部分版本,则可以删除curry.

你可以在Ramda REPL上看到这个.

javascript – 修改对象数组中的对象属性

javascript – 修改对象数组中的对象属性

var foo = [{ bar: 1,baz: [1,2,3] },{ bar: 2,baz: [4,5,6] }];

var filtered = $.grep(foo,function(v){
    return v.bar === 1;
});

console.log(filtered);

http://jsfiddle.net/98EsQ/

有没有办法修改某些对象属性(像我上面过滤掉的那样),而不创建新的数组和/或对象?

所需结果:[{bar:1,baz:[11,22,33]},{bar:2,baz:[4,6]}]

解决方法

当然,只是改变它:

用jQuery的$.each:

$.each(foo,function() {
    if (this.bar === 1) {
        this.baz[0] = 11;
        this.baz[1] = 22;
        this.baz[2] = 33;
    }
});

与ES5的forEach:

foo.forEach(function(obj) {
    if (obj.bar === 1) {
        obj.baz[0] = 11;
        obj.baz[1] = 22;
        obj.baz[2] = 33;
    }
});

…或者你有other looping options in this other SO answer.

javascript – 在对象属性名称中使用变量

javascript – 在对象属性名称中使用变量

我有一个名为direction的变量存储:left,right.

我需要根据该变量更改受影响的保证金.

现在我正在使用条件,是否可以用变量方向的输出替换“左”?

$("#map").animate({"margin-left": "+=50px"},500);

解决方法

不是直接的,但你可以创建一个对象并在animate()中使用它之前对其进行操作:

var direction = "left";
var property = {};
property[ "margin-"+direction ] = "+=50px";
$("#map").animate( property,500);

今天关于javascript – Lodash查找数组中是否存在对象属性js查找数组中是否包含某个对象的分享就到这里,希望大家有所收获,若想了解更多关于javascript – 使用lodash按键对数组中的对象进行排序、javascript – 使用ramda更改数组中的对象属性、javascript – 修改对象数组中的对象属性、javascript – 在对象属性名称中使用变量等相关知识,可以在本站进行查询。

本文标签: