Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从使用map创建的对象中获取最高值_Javascript_Jquery_Arrays_Ecmascript 6_Flexbox - Fatal编程技术网

Javascript 从使用map创建的对象中获取最高值

Javascript 从使用map创建的对象中获取最高值,javascript,jquery,arrays,ecmascript-6,flexbox,Javascript,Jquery,Arrays,Ecmascript 6,Flexbox,我已经将带有嵌套div的div动态添加到dom中。它们具有以下数据属性: 数据名称编号,数据模型,数据价格 我想要的是从所有“datadiv”中的每一个数组中获取“dataprice”的最高值。在我的示例中,在最后一个 更多说明:在我的示例中,我有三个类为“frame”的div=我需要一个包含三个值的数组。事实上,在1到10之间,甚至更多的时间都有 所以我的例子的结果是 let array = [100,150,200] or let object = {1:100,2:150,3:200} /

我已经将带有嵌套div的div动态添加到dom中。它们具有以下数据属性:
数据名称编号
数据模型
数据价格

我想要的是从所有“datadiv”中的每一个数组中获取“dataprice”的最高值。在我的示例中,在最后一个

更多说明:在我的示例中,我有三个类为“frame”的div=我需要一个包含三个值的数组。事实上,在1到10之间,甚至更多的时间都有

所以我的例子的结果是

let array = [100,150,200]
or
let object = {1:100,2:150,3:200} //from the name-nr
到目前为止,我只设法映射了
数据项
s 我尝试了
map.get
和其他,他们都给了我错误,我不知道该往哪个方向走。请问你能帮忙吗

例如:

HTML

控制台

Object { name: 1, model: "1/1", price: 100 }  
Object { name: 2, model: "1/1", price: 150 } 
Object { name: 3, model: "1/2", price: 100 } 
Object { name: 3, model: "2/2", price: 200 }

您可以选择框架,然后在内部框上缩小:

$('.frame').map(function() {
    const biggerBox = $(this).find('.box').toArray().reduce((bigger, current) => 
        $(bigger).data('price') > $(current).data('price') ? bigger : current)
    const data = $(biggerBox).data()
    console.log({ name: data.nameNr, price: data.price, div: data.div })
})
使用小提琴中的叉子:

创建一个哈希表,方法是
减少为具有唯一的
名称
s且价格最高的哈希表,然后根据需要将它们取出到数组中

请参见下面的演示:

函数functionName(){
让hash=jQuery(“.frame.box”).map(函数(){
返回{
名称:jQuery(this).data(“名称编号”),
模型:jQuery(this).data('div'),
price:jQuery(this).data('price')
};
}).get().reduce(函数(p,c){
如果((p[c.name]&&p[c.name].price
.flex{
显示器:flex;
对齐项目:居中;
证明内容:中心;
宽度:400px;
高度:300px;
}
.框架{
轮廓:1px纯红;
弹性:1;
显示器:flex;
弯曲方向:立柱;
身高:100%;
}
.盒子{
边框顶部:1px纯绿色;
}
.50{
身高:50%;
}
钮扣{
宽度:100px;
高度:35px;
}

点击

您的目标是从显示的控制台输出中提取最后一行吗?目标不明确。你说取最高值,然后显示所有值的结果。我不太清楚你想说什么,我将重新提出我的问题。到目前为止,我只是设法绘制了内容。现在我需要过滤它。不仅是最后一次。从最后一个(名称:3)开始,我需要更大的一个,这次正好是最后一个),因此如果我可以重新格式化:您映射到没有重复的
数据名称nr
,并且您希望按较低的值过滤掉(例如:删除同名项的较低值),谢谢,看起来这样可以工作。我试着做一个真实的测试。我让你知道!非常感谢。我也会关注这件事。对我来说,读p和c有点困难:)
if((p[c.name]&&p[c.name].price
-如果存在
散列
则覆盖具有最高
价格的对象,否则将其添加到
散列
。。。希望这是清楚的:)是的,它(有点)清楚。我忘了在我的问题中,我需要对所有这些进行添加。所以在你的例子中,我想我可以在飞行中做到这一点。我的意思是在同一个函数中。(100+150+200)您好,不幸的是我发现了一个问题。如果我在点击后更新数据价格,这将不再有效。。但是,如果我更新整个div,它就会更新。我真的不明白为什么会这样。还是真的?@Mik_A你能给我看一把小提琴演示一下吗?我没发现问题。。
Object { name: 1, model: "1/1", price: 100 }  
Object { name: 2, model: "1/1", price: 150 } 
Object { name: 3, model: "1/2", price: 100 } 
Object { name: 3, model: "2/2", price: 200 }
$('.frame').map(function() {
    const biggerBox = $(this).find('.box').toArray().reduce((bigger, current) => 
        $(bigger).data('price') > $(current).data('price') ? bigger : current)
    const data = $(biggerBox).data()
    console.log({ name: data.nameNr, price: data.price, div: data.div })
})